Can not refresh not managed object

17,687

Solution 1

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

Solution 2

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?).

Share:
17,687

Related videos on Youtube

Marwen Trabelsi
Author by

Marwen Trabelsi

The important thing is not to stop questioning. Don't be afraid to ask the stupid questions : a good programmer will adopt the mindset of being dumb. He will start asking the most simple and child-like questions. My linkedIn

Updated on September 15, 2022

Comments

  • Marwen Trabelsi
    Marwen Trabelsi over 1 year

    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.

  • Simiil
    Simiil over 10 years
    to be clear, it is recommended to use different EntityManagers for different Actions. But i think in this case it would be plausible to use one