You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by "Christopher Thonfeld-Guckes (Jira)" <ji...@apache.org> on 2025/09/23 14:10:00 UTC

[jira] [Updated] (CAY-2896) Inserting two identical objects into two datamaps stores both objects in the last used datamap

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

Christopher Thonfeld-Guckes updated CAY-2896:
---------------------------------------------
    Description: 
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.

https://github.com/apache/cayenne/pull/630

  was:
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.


> 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: 4.2, 4.2.1, 4.2.2, 5.0-M1
>            Reporter: Christopher Thonfeld-Guckes
>            Priority: Major
>              Labels: newbie, patch, pull-request-available
>             Fix For: Undefined future
>
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> 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.
> https://github.com/apache/cayenne/pull/630



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