openjpa-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From garpinc <garp...@yahoo.com>
Subject unexpected error "there is already an object in the L1 cache with this id"
Date Fri, 21 Sep 2012 15:26:59 GMT
Also Rick in a separate issue while have my test rig can you also test the
following. If in MasterClass you remove the psuedo pk getters and setters
and make method like (which I would have originally thought the best way to
model it):

    @Id
    @OneToOne(cascade = { javax.persistence.CascadeType.ALL }, targetEntity
= KeyClass.class)
    public KeyInterface getKey() {
        return key;
    }

Then I get following exception:
<openjpa-2.2.0-r422266:1244990 fatal store error>
org.apache.openjpa.persistence.RollbackException: Attempt to assign id "0"
to new instance "test.MasterClass-0" failed; there is already an object in
the L1 cache with this id. You must delete this object (in a previous
transaction or the current one) before reusing its id.  This error can also
occur when a horizontally or vertically mapped classes uses auto-increment
application identity and does not use a hierarchy of application identity
classes.
FailedObject: test.MasterClass-0

Here is test case to trigger it

    @Test
    public void testTwoBeansInOneTransaction() throws IOException,
ClassNotFoundException, InstantiationException, IllegalAccessException {
        List<Class&lt;?>> classes = new ArrayList<Class&lt;?>>();
        classes.add(MasterClass.class);
        classes.add(DetailClass.class);
        classes.add(KeyClass.class);
        EntityManagerFactory emf = testClass(classes, false);
        EntityManager em = emf.createEntityManager();
        Class<?> masterClassClass =
Thread.currentThread().getContextClassLoader().loadClass(MasterClass.class.getName());
        Class<?> keyClassClass =
Thread.currentThread().getContextClassLoader().loadClass(KeyClass.class.getName());

        EntityTransaction t = em.getTransaction();
        IMasterClass mc1 = (IMasterClass) masterClassClass.newInstance();
        KeyInterface key1 = (KeyInterface) keyClassClass.newInstance();
        IMasterClass mc2 = (IMasterClass) masterClassClass.newInstance();
        KeyInterface key2 = (KeyInterface) keyClassClass.newInstance();
        t.begin();
        key1.setUniqueField1("u1");
        mc1.setKey(key1);
        em.persist(mc1);
        key2.setUniqueField1("u2");
        mc2.setKey(key2);
        em.persist(mc2);
        t.commit();
        em.close();
    }



--
View this message in context: http://openjpa.208410.n2.nabble.com/unexpected-error-there-is-already-an-object-in-the-L1-cache-with-this-id-tp7581176.html
Sent from the OpenJPA Users mailing list archive at Nabble.com.

Mime
View raw message