Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Suggestion to Implement CRUD Methods in JPA Controller Templates for NetBeans 21 #7349

Open
marcelperezrubin opened this issue May 2, 2024 · 8 comments
Labels
kind:feature A feature request needs:triage Requires attention from one of the committers

Comments

@marcelperezrubin
Copy link

Description

Hello NetBeans Team,

I've been working with NetBeans IDE, specifically transitioning between version 19 and version 21, and I noticed a significant change in the way JPA Controller classes are generated. In NetBeans 19, the JPA Controller template included CRUD methods (create, read, update, delete) which are essential for basic database operations. However, in NetBeans 21, these methods seem to be missing in the generated code.

This change has impacted the ease of use and the efficiency of starting new projects with JPA, as developers now need to manually add these CRUD methods, which was previously automated.

Example of generated JPA Controller in NetBeans 19:

package persistencia;

import java.io.Serializable;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Query;
import javax.persistence.EntityNotFoundException;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import logica.Usuario;
import persistencia.exceptions.NonexistentEntityException;

public class UsuarioJpaController implements Serializable {

public UsuarioJpaController(EntityManagerFactory emf) {
    this.emf = emf;
}
private EntityManagerFactory emf = null;

public EntityManager getEntityManager() {
    return emf.createEntityManager();
}

public void create(Usuario usuario) {
    EntityManager em = null;
    try {
        em = getEntityManager();
        em.getTransaction().begin();
        em.persist(usuario);
        em.getTransaction().commit();
    } finally {
        if (em != null) {
            em.close();
        }
    }
}

public void edit(Usuario usuario) throws NonexistentEntityException, Exception {
    EntityManager em = null;
    try {
        em = getEntityManager();
        em.getTransaction().begin();
        usuario = em.merge(usuario);
        em.getTransaction().commit();
    } catch (Exception ex) {
        String msg = ex.getLocalizedMessage();
        if (msg == null || msg.length() == 0) {
            int id = usuario.getId();
            if (findUsuario(id) == null) {
                throw new NonexistentEntityException("The usuario with id " + id + " no longer exists.");
            }
        }
        throw ex;
    } finally {
        if (em != null) {
            em.close();
        }
    }
}

public void destroy(int id) throws NonexistentEntityException {
    EntityManager em = null;
    try {
        em = getEntityManager();
        em.getTransaction().begin();
        Usuario usuario;
        try {
            usuario = em.getReference(Usuario.class, id);
            usuario.getId();
        } catch (EntityNotFoundException enfe) {
            throw new NonexistentEntityException("The usuario with id " + id + " no longer exists.", enfe);
        }
        em.remove(usuario);
        em.getTransaction().commit();
    } finally {
        if (em != null) {
            em.close();
        }
    }
}

public List<Usuario> findUsuarioEntities() {
    return findUsuarioEntities(true, -1, -1);
}

public List<Usuario> findUsuarioEntities(int maxResults, int firstResult) {
    return findUsuarioEntities(false, maxResults, firstResult);
}

private List<Usuario> findUsuarioEntities(boolean all, int maxResults, int firstResult) {
    EntityManager em = getEntityManager();
    try {
        CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
        cq.select(cq.from(Usuario.class));
        Query q = em.createQuery(cq);
        if (!all) {
            q.setMaxResults(maxResults);
            q.setFirstResult(firstResult);
        }
        return q.getResultList();
    } finally {
        em.close();
    }
}

public Usuario findUsuario(int id) {
    EntityManager em = getEntityManager();
    try {
        return em.find(Usuario.class, id);
    } finally {
        em.close();
    }
}

public int getUsuarioCount() {
    EntityManager em = getEntityManager();
    try {
        CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
        Root<Usuario> rt = cq.from(Usuario.class);
        cq.select(em.getCriteriaBuilder().count(rt));
        Query q = em.createQuery(cq);
        return ((Long) q.getSingleResult()).intValue();
    } finally {
        em.close();
    }
}

}

Generated Jpa Controller code in NetBeans 21:

/*

  • Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
  • Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
    */
    package persistencia;

import java.io.Serializable;

/**
*

  • @author marcelrubin
    */
    public class UsuarioJpaController implements Serializable {

}

Could the team consider re-implementing the CRUD methods in the JPA Controller templates for NetBeans 21? This feature was very useful in accelerating development and improving the out-of-the-box functionality of the IDE.

Thank you for considering this suggestion. I believe it would enhance the productivity of many developers who rely on NetBeans for Java EE and JPA projects.

Best regards,

Marcel

Use case/motivation

No response

Related issues

No response

Are you willing to submit a pull request?

No

@marcelperezrubin marcelperezrubin added kind:feature A feature request needs:triage Requires attention from one of the committers labels May 2, 2024
@matthiasblaesing
Copy link
Contributor

It would be helpful if you could test the current release candidate for NB22:

https://ci-builds.apache.org/job/Netbeans/job/netbeans-TLP/job/release220/8/artifact/dist/

There were fixes for the javax/jakarta transition.

If you don't find this fixed, please provide steps to reproduce.

@marcelperezrubin
Copy link
Author

marcelperezrubin commented May 3, 2024 via email

@matthiasblaesing
Copy link
Contributor

mac OS is kind of hard to build for, so for RCs there are no notarized builds available. In the folder netbeans the binary zip is available. On other OSes, it is as easy as unzipping the file, maybe setting the netbeans_jdkhome in etc/netbeans.conf and running bin/netbeans, bin/netbeans.exe or bin/netbeans64.exe. You might need to fiddle with file attributes after unzipping.

@matthiasblaesing
Copy link
Contributor

The binary zip is [netbeans-22-rc2-bin.zip](https://ci-builds.apache.org/job/Netbeans/job/netbeans-TLP/job/release220/8/artifact/dist/netbeans/netbeans-22-rc2-bin.zip)

@neilcsmith-net
Copy link
Member

@matthiasblaesing there is normally a notarized macOS installer for one of the RCs. It's an important test. Unfortunately this is delayed until RC3 as per the problem at #7268 (comment)

The correct link for RCs is #7281 The Jenkins link should not be shared outside the dev@ list.

@marcelperezrubin
Copy link
Author

Is it possible to transfer or copy the "JPA Controller Classes from Entity Classes" template from NetBeans 19 to NetBeans 21? If so, could you provide guidance on how to achieve this?

Thank you for your assistance.

@matthiasblaesing
Copy link
Contributor

@marcelperezrubin as already stated: This might be fixed in NB22. So please state how to reproduce the problem, then I'm willing to have a look. Additionally it might be worth testing NB22 RC4, as already stated the issue might already be fixed.

@marcelperezrubin
Copy link
Author

marcelperezrubin commented May 21, 2024 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
kind:feature A feature request needs:triage Requires attention from one of the committers
Projects
None yet
Development

No branches or pull requests

3 participants