openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Xiaoqin Feng (JIRA)" <j...@apache.org>
Subject [jira] Created: (OPENJPA-722) persist - clear - merge scenario doesn't work
Date Thu, 11 Sep 2008 23:13:44 GMT
persist - clear - merge scenario doesn't work
---------------------------------------------

                 Key: OPENJPA-722
                 URL: https://issues.apache.org/jira/browse/OPENJPA-722
             Project: OpenJPA
          Issue Type: Sub-task
          Components: kernel
    Affects Versions: 1.2.0, 1.1.0, 1.0.3
            Reporter: Xiaoqin Feng


EntityManager.clear() now don't  flush new object but only detach it.
But DetachManager still flush dirty object and assume detached objects are in clean state.
When the "new" object is merged back and transaction commit,  because the object state lost
its original state PNEW, it will not be added to insert list  and not flushed to DB.

According to the EntityManager.clear() API,  changes made to entities that have not been flushed
to the database will not be persisted.  When they merges back to persistent context, they
all should kept there original state.

I added the following test to org.apache.openjpa.persistence.simple.TestEntityManagerClear.

    public void testClearMerge() {
        // Create EntityManager and Start a transaction (1)
        begin();

        // Insert a new object then clear persistent context
        AllFieldTypes testObject1 = new AllFieldTypes();
        testObject1.setStringField("my test object1");
        persist(testObject1);
        //Object1 is not flushed to DB but only detached by clear().
        em.clear();
        em.merge(testObject1);
        //expect the PCState is same as before detached, 
        //so it is PNew instead of PCLEAN and is add to insert list.
        commit();
        
        //Start a new transaction
        begin();
        
        // Attempt retrieve of Object1 from previous PC (should exist)
        assertEquals(1, query("select x from AllFieldTypes x "
            + "where x.stringField = 'my test object1'").
                getResultList().size());
        
        // Rollback the transaction and close everything
        rollback();
    }


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message