[
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.