Christopher Thonfeld-Guckes created CAY-2896:
------------------------------------------------

             Summary: Inserting two identical objects into two datamaps stores 
both objects in the last used datamap
                 Key: CAY-2896
                 URL: https://issues.apache.org/jira/browse/CAY-2896
             Project: Cayenne
          Issue Type: Bug
          Components: Core Library
    Affects Versions: 5.0-M1, 4.2.2, 4.2.1, 4.2
            Reporter: Christopher Thonfeld-Guckes
             Fix For: Undefined future


After upgrading from 4.1.1 to 4.2 we've noticed a regression. We have two 
identical tables in two separate databases. Our integration test tries storing 
one object in each table like so:
{code:java}
createObject in DbContext1
createObject in DbContext2
flush{code}
In all versions before 4.2 this worked fine. Internally the entities have 
different names (CommonLog and PluginLog), but they're the same Java class and 
the table names are the same in both databases.

>From version 4.2 on Cayenne started batching those requests which resulted in 
>both entities being written to the PluginLog table. We've tried different 
>orders of execution, the last table always wins. If we flush in between the 
>create tasks, it works as before.

We found an issue in the *DbRowOp classes, that lead to this behaviour. The 
isSameBatch functions don't check for different datamaps, when batching up 
insert, update and delete statements.

I've created a PR for it which I will link after creating this ticket. I do 
need some feedback, whether that's actually enough to fix the issue.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to