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)