[ 
https://issues.apache.org/jira/browse/OPENJPA-722?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Michael Dick updated OPENJPA-722:
---------------------------------

    Fix Version/s: 2.0.0
                   1.3.0

> 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.0.3, 1.1.0, 1.2.0
>            Reporter: Xiaoqin Feng
>            Assignee: Jeremy Bauer
>             Fix For: 1.3.0, 2.0.0
>
>         Attachments: openjpa-722-fromQin.patch, openjpa-722-V2.patch, 
> openjpa-722-V3.patch, TestEntityManagerClear-V2.java, 
> TestEntityManagerClear.java
>
>
> 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.

Reply via email to