Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can not refresh not managed object

Tags:

java

jpa

I've to refresh a list of Eleve from the database to a Jtable. The Jtable it's self is bound to an observable list< Eleve >, so any add/delete to the list is automatically updated in the Jtable.

My code explain it's self:

EleveJpaController ejc = new EleveJpaController(emf);
java.util.Collection<Eleve> data = ejc.findEleveByNiveauClasseNomPrenom(niv, classe, nom, prenom);

for (Eleve entity : data) {
    entityManager.refresh(entity);
}

list.clear();
list.addAll(data);

List< Eleve > findEleveByNiveauClasseNomPrenom(a,v,x,n):

 public List<Eleve> findEleveByNiveauClasseNomPrenom(String niv,String classe,String nom, String prenom)
    {
        EntityManager em = getEntityManager();
        Query qr= em.createQuery("SELECT e FROM Eleve e WHERE e.niv.niv like '%"+niv+"%' and e.class1.libelle like '%"+classe+"%' and e.nom like '%"+nom+"%' and e.prenom like '%"+prenom+"%'");

       return qr.getResultList(); 
    }

As you can see, It's well manged list of Eleve objects.. So why this exception is thrown ?

[EL Info]: 2013-12-02 13:25:33.312--ServerSession(1903253526)--EclipseLink, version: Eclipse Persistence Services - 2.3.0.v20110604-r9504
[EL Info]: 2013-12-02 13:25:35.005--ServerSession(1903253526)--file:/C:/Users/marwen/Documents/NetBeansProjects/JocondeFinale/build/classes/_JocondeFinalePU login successful
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Can not refresh not managed object: entities.Eleve[ idEleve=7 ].
    at org.eclipse.persistence.internal.jpa.EntityManagerImpl.refresh(EntityManagerImpl.java:943)
    at org.eclipse.persistence.internal.jpa.EntityManagerImpl.refresh(EntityManagerImpl.java:849)
    at entities.GestionPaiement.niveauJcbbxItemStateChanged(GestionPaiement.java:736)
    at entities.GestionPaiement.access$2000(GestionPaiement.java:32)
    at entities.GestionPaiement$FormListener.itemStateChanged(GestionPaiement.java:607)
    at javax.swing.JComboBox.fireItemStateChanged(JComboBox.java:1225)
    at javax.swing.JComboBox.selectedItemChanged(JComboBox.java:1273)
    at javax.swing.JComboBox.contentsChanged(JComboBox.java:1329)
    at javax.swing.AbstractListModel.fireContentsChanged(AbstractListModel.java:118)
    at javax.swing.DefaultComboBoxModel.setSelectedItem(DefaultComboBoxModel.java:94)
    at javax.swing.JComboBox.setSelectedItem(JComboBox.java:578)
    at javax.swing.JComboBox.setSelectedIndex(JComboBox.java:624)
    at javax.swing.plaf.basic.BasicComboPopup$Handler.mouseReleased(BasicComboPopup.java:835)
    at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:290)
    at java.awt.Component.processMouseEvent(Component.java:6505)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
    at javax.swing.plaf.basic.BasicComboPopup$1.processMouseEvent(BasicComboPopup.java:499)
    at java.awt.Component.processEvent(Component.java:6270)
    at java.awt.Container.processEvent(Container.java:2229)
    at java.awt.Component.dispatchEventImpl(Component.java:4861)
    at java.awt.Container.dispatchEventImpl(Container.java:2287)
    at java.awt.Component.dispatchEvent(Component.java:4687)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
    at java.awt.Container.dispatchEventImpl(Container.java:2273)
    at java.awt.Window.dispatchEventImpl(Window.java:2719)
    at java.awt.Component.dispatchEvent(Component.java:4687)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
    at java.awt.EventQueue.access$200(EventQueue.java:103)
    at java.awt.EventQueue$3.run(EventQueue.java:694)
    at java.awt.EventQueue$3.run(EventQueue.java:692)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
    at java.awt.EventQueue$4.run(EventQueue.java:708)
    at java.awt.EventQueue$4.run(EventQueue.java:706)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

Cheers.

like image 244
Marwen Trabelsi Avatar asked Dec 11 '22 09:12

Marwen Trabelsi


2 Answers

You're probably using a different EntityManager to refresh your entities than the one which loads the entities from the database. The entities are not managed in the new EntityManager. According to the javadoc, the exception is the normal behaviour for not managed entities. Either use the same EntityManager, or use merge() to make your objects managed

like image 190
Simiil Avatar answered Dec 28 '22 22:12

Simiil


That means that when calling entityManager.refresh(entity), your entities are not managed by that instance of EntityManager, not by the entityManager used in findEleveByNiveauClasseNomPrenom(). On the other side, you may ask yourself why you try to refresh those entities (havbe you made any changes to them?).

like image 32
V G Avatar answered Dec 28 '22 22:12

V G