You're a superstar! :)

On Tue, Nov 23, 2021 at 11:28 AM Nikita Timofeev <ntimof...@objectstyle.com>
wrote:

> Hi all,
>
> Thanks, Lon for the report and an excellent example, that really
> helped to quickly find the problem [1].
> It should be fixed now.
>
> Sorry, Michael for not notifying that I dived into this, just grabbed
> the test case and started debugging :)
>
> [1] https://issues.apache.org/jira/browse/CAY-2723
>
> On Wed, Nov 17, 2021 at 9:25 PM Michael Gentry <blackn...@gmail.com>
> wrote:
> >
> > OK, nice to know. I won't dive into it more this evening, then.
> >
> > Thanks!
> >
> >
> > On Wed, Nov 17, 2021 at 1:04 PM Andrus Adamchik <aadamc...@gmail.com>
> wrote:
> >
> > > Hi Mike,
> > >
> > > Nikita mentioned a few hours ago that he was able to reproduce.
> Appears to
> > > be a bug in the 4.2 stack.
> > >
> > > Andrus
> > >
> > > > On Nov 17, 2021, at 7:44 PM, Michael Gentry <blackn...@gmail.com>
> wrote:
> > > >
> > > > Hi Lon,
> > > >
> > > > I didn't have a lot of time to look into it, but I suspect it may be
> in
> > > > your PK/FK mapping on the DbEntities.
> > > >
> > > > For example, in order_header, you have order_header ->>
> > > order_detail_sales,
> > > > but you've mapped that as To-Many AND To-Dependent PK, which doesn't
> make
> > > > sense.
> > > >
> > > >
> > > > On Tue, Nov 16, 2021 at 6:14 PM Lon Varscsak <lon.varsc...@gmail.com
> >
> > > wrote:
> > > >
> > > >> I forgot to mention that I'm running 4.2.M4-SNAPSHOT (updated from
> > > github
> > > >> as of an hour ago).
> > > >>
> > > >> On Tue, Nov 16, 2021 at 4:06 PM Lon Varscsak <
> lon.varsc...@gmail.com>
> > > >> wrote:
> > > >>
> > > >>> Hey all,
> > > >>>
> > > >>> I have a setup where I have an optional to-one relationship, but
> when I
> > > >>> try to clear the relationship and commitChanges, I get a low-level
> > > >> Cayenne
> > > >>> error along with some in appropriate sql generated.
> > > >>>
> > > >>> where it's doing an UPDATE to order_detail_costs should be a no-op,
> > > >>> because the object was removed from it's parent
> (order_detail_sales)
> > > with
> > > >>> setOrderDetailCost(null) along with a
> > > >>> objectContext.deleteObject(orderDetailCost).  This is probably a
> > > problem
> > > >>> for Nikita to look at, but I figured someone else may have run into
> > > this
> > > >> as
> > > >>> well.  It's unusual for me to have optional to-one relationships,
> but
> > > it
> > > >>> does happen.
> > > >>>
> > > >>> Here is a sample project (Debug As -> Java Application) to try
> (link to
> > > >> my
> > > >>> Synology):
> > > >>>
> > > >>
> > >
> https://varscsak.synology.me:5001/d/s/mI7SBS6fApoUMNT1K5lfpaCXHKEkHkgd/jIy5Ug64Hjp2ieZzOceknc39sjBasJLE-T74gPgqKEgk
> > > >>>
> > > >>> ...snip...
> > > >>>
> > > >>> Nov 16 15:27:55 INFO  org.apache.cayenne.log.JdbcEventLogger  -
> INSERT
> > > >>> INTO "order_header"( "attribute_1", "attribute_2", "order_number")
> > > >> VALUES(
> > > >>> ?, ?, ?)
> > > >>>
> > > >>> Nov 16 15:27:55 INFO  org.apache.cayenne.log.JdbcEventLogger  -
> [bind:
> > > >>> 1->attribute_1:'TEST1', 2->attribute_2:1, 3->order_number:1]
> > > >>>
> > > >>> Nov 16 15:27:55 INFO  org.apache.cayenne.log.JdbcEventLogger  - ===
> > > >>> updated 1 row.
> > > >>>
> > > >>> Nov 16 15:27:55 INFO  org.apache.cayenne.log.JdbcEventLogger  -
> INSERT
> > > >>> INTO "order_detail_sales"( "detail_attr_1", "detail_attr_2",
> > > >>> "order_line_number", "order_number") VALUES( ?, ?, ?, ?)
> > > >>>
> > > >>> Nov 16 15:27:55 INFO  org.apache.cayenne.log.JdbcEventLogger  -
> [bind:
> > > >>> 1->detail_attr_1:'TEST1', 2->detail_attr_2:1,
> 3->order_line_number:1,
> > > >>> 4->order_number:1]
> > > >>>
> > > >>> Nov 16 15:27:55 INFO  org.apache.cayenne.log.JdbcEventLogger  - ===
> > > >>> updated 1 row.
> > > >>>
> > > >>> Nov 16 15:27:55 INFO  org.apache.cayenne.log.JdbcEventLogger  -
> UPDATE
> > > >>> "order_detail_costs" SET "order_number" = ?, "order_line_number" =
> ?
> > > >> WHERE
> > > >>> ( "order_line_number" = ? ) AND ( "order_number" = ? )
> > > >>>
> > > >>> Nov 16 15:27:55 INFO  org.apache.cayenne.log.JdbcEventLogger  - ***
> > > >> error.
> > > >>>
> > > >>> java.lang.UnsupportedOperationException
> > > >>>
> > > >>> at java.util.Collections$UnmodifiableMap.put(Collections.java:1459)
> > > >>>
> > > >>> at
> > > org.apache.cayenne.query.BatchQueryRow.getValue(BatchQueryRow.java:80)
> > > >>>
> > > >>> at org.apache.cayenne.query.UpdateBatchQuery$1.getValue(
> > > >>> UpdateBatchQuery.java:124)
> > > >>>
> > > >>> at
> > > >>>
> > > >>
> > >
> org.apache.cayenne.access.translator.batch.UpdateBatchTranslator.updateBindings(
> > > >>> UpdateBatchTranslator.java:80)
> > > >>>
> > > >>> at
> org.apache.cayenne.access.jdbc.BatchAction.runAsIndividualQueries(
> > > >>> BatchAction.java:191)
> > > >>>
> > > >>> at org.apache.cayenne.access.jdbc.BatchAction.performAction(
> > > >>> BatchAction.java:93)
> > > >>>
> > > >>> at org.apache.cayenne.access.DataNodeQueryAction.runQuery(
> > > >>> DataNodeQueryAction.java:97)
> > > >>>
> > > >>> at
> org.apache.cayenne.access.DataNode.performQueries(DataNode.java:273)
> > > >>>
> > > >>> at
> > > >>>
> > > >>
> > >
> org.apache.cayenne.access.flush.DefaultDataDomainFlushAction.lambda$executeQueries$6(
> > > >>> DefaultDataDomainFlushAction.java:177)
> > > >>>
> > > >>> at java.util.HashMap.forEach(HashMap.java:1290)
> > > >>>
> > > >>> at
> > > >>>
> > > >>
> > >
> org.apache.cayenne.access.flush.DefaultDataDomainFlushAction.executeQueries(
> > > >>> DefaultDataDomainFlushAction.java:176)
> > > >>>
> > > >>> at
> org.apache.cayenne.access.flush.DefaultDataDomainFlushAction.flush(
> > > >>> DefaultDataDomainFlushAction.java:89)
> > > >>>
> > > >>> at
> > > org.apache.cayenne.access.DataDomain.onSyncFlush(DataDomain.java:637)
> > > >>>
> > > >>> at org.apache.cayenne.access.DataDomain.onSyncNoFilters(
> > > >>> DataDomain.java:609)
> > > >>>
> > > >>> at
> > > org.apache.cayenne.access.DataDomain$DataDomainSyncFilterChain.onSync(
> > > >>> DataDomain.java:835)
> > > >>>
> > > >>> at org.apache.cayenne.tx.TransactionFilter.lambda$onSync$0(
> > > >>> TransactionFilter.java:61)
> > > >>>
> > > >>> at
> > > >>>
> > > >>
> > >
> org.apache.cayenne.tx.DefaultTransactionManager$BaseTransactionHandler.performInTransaction(
> > > >>> DefaultTransactionManager.java:180)
> > > >>>
> > > >>> at
> > > >>>
> > > >>
> > >
> org.apache.cayenne.tx.DefaultTransactionManager$BaseTransactionHandler.performInNewTransaction(
> > > >>> DefaultTransactionManager.java:152)
> > > >>>
> > > >>> at
> > > >>>
> > > >>
> > >
> org.apache.cayenne.tx.DefaultTransactionManager$NestedTransactionHandler.handle(
> > > >>> DefaultTransactionManager.java:95)
> > > >>>
> > > >>> at
> > > org.apache.cayenne.tx.DefaultTransactionManager.performInTransaction(
> > > >>> DefaultTransactionManager.java:62)
> > > >>>
> > > >>> at
> > > org.apache.cayenne.tx.DefaultTransactionManager.performInTransaction(
> > > >>> DefaultTransactionManager.java:40)
> > > >>>
> > > >>> at org.apache.cayenne.tx.TransactionFilter.onSync(
> > > >>> TransactionFilter.java:61)
> > > >>>
> > > >>> at
> > > org.apache.cayenne.access.DataDomain$DataDomainSyncFilterChain.onSync(
> > > >>> DataDomain.java:834)
> > > >>>
> > > >>> at org.apache.cayenne.access.DataDomain.onSync(DataDomain.java:596)
> > > >>>
> > > >>> at org.apache.cayenne.access.DataContext.flushToParent(
> > > >>> DataContext.java:737)
> > > >>>
> > > >>> at org.apache.cayenne.access.DataContext.commitChanges(
> > > >>> DataContext.java:686)
> > > >>>
> > > >>> at com.smarthealth.cayennetest.App.main(App.java:38)
> > > >>>
> > > >>> Nov 16 15:27:55 INFO  org.apache.cayenne.log.JdbcEventLogger  - ***
> > > >>> transaction rolledback.
> > > >>>
> > > >>> org.apache.cayenne.CayenneRuntimeException: [v.4.2.M4-SNAPSHOT Nov
> 16
> > > >>> 2021 22:12:02] Commit Exception
> > > >>>
> > > >>> at org.apache.cayenne.access.DataContext.flushToParent(
> > > >>> DataContext.java:769)
> > > >>>
> > > >>> at org.apache.cayenne.access.DataContext.commitChanges(
> > > >>> DataContext.java:686)
> > > >>>
> > > >>> at com.smarthealth.cayennetest.App.main(App.java:38)
> > > >>>
> > > >>> Caused by: java.lang.UnsupportedOperationException
> > > >>>
> > > >>> at java.util.Collections$UnmodifiableMap.put(Collections.java:1459)
> > > >>>
> > > >>> at
> > > org.apache.cayenne.query.BatchQueryRow.getValue(BatchQueryRow.java:80)
> > > >>>
> > > >>> at org.apache.cayenne.query.UpdateBatchQuery$1.getValue(
> > > >>> UpdateBatchQuery.java:124)
> > > >>>
> > > >>> at
> > > >>>
> > > >>
> > >
> org.apache.cayenne.access.translator.batch.UpdateBatchTranslator.updateBindings(
> > > >>> UpdateBatchTranslator.java:80)
> > > >>>
> > > >>> at
> org.apache.cayenne.access.jdbc.BatchAction.runAsIndividualQueries(
> > > >>> BatchAction.java:191)
> > > >>>
> > > >>> at org.apache.cayenne.access.jdbc.BatchAction.performAction(
> > > >>> BatchAction.java:93)
> > > >>>
> > > >>> at org.apache.cayenne.access.DataNodeQueryAction.runQuery(
> > > >>> DataNodeQueryAction.java:97)
> > > >>>
> > > >>> at
> org.apache.cayenne.access.DataNode.performQueries(DataNode.java:273)
> > > >>>
> > > >>> at
> > > >>>
> > > >>
> > >
> org.apache.cayenne.access.flush.DefaultDataDomainFlushAction.lambda$executeQueries$6(
> > > >>> DefaultDataDomainFlushAction.java:177)
> > > >>>
> > > >>> at java.util.HashMap.forEach(HashMap.java:1290)
> > > >>>
> > > >>> at
> > > >>>
> > > >>
> > >
> org.apache.cayenne.access.flush.DefaultDataDomainFlushAction.executeQueries(
> > > >>> DefaultDataDomainFlushAction.java:176)
> > > >>>
> > > >>> at
> org.apache.cayenne.access.flush.DefaultDataDomainFlushAction.flush(
> > > >>> DefaultDataDomainFlushAction.java:89)
> > > >>>
> > > >>> at
> > > org.apache.cayenne.access.DataDomain.onSyncFlush(DataDomain.java:637)
> > > >>>
> > > >>> at org.apache.cayenne.access.DataDomain.onSyncNoFilters(
> > > >>> DataDomain.java:609)
> > > >>>
> > > >>> at
> > > org.apache.cayenne.access.DataDomain$DataDomainSyncFilterChain.onSync(
> > > >>> DataDomain.java:835)
> > > >>>
> > > >>> at org.apache.cayenne.tx.TransactionFilter.lambda$onSync$0(
> > > >>> TransactionFilter.java:61)
> > > >>>
> > > >>> at
> > > >>>
> > > >>
> > >
> org.apache.cayenne.tx.DefaultTransactionManager$BaseTransactionHandler.performInTransaction(
> > > >>> DefaultTransactionManager.java:180)
> > > >>>
> > > >>> at
> > > >>>
> > > >>
> > >
> org.apache.cayenne.tx.DefaultTransactionManager$BaseTransactionHandler.performInNewTransaction(
> > > >>> DefaultTransactionManager.java:152)
> > > >>>
> > > >>> at
> > > >>>
> > > >>
> > >
> org.apache.cayenne.tx.DefaultTransactionManager$NestedTransactionHandler.handle(
> > > >>> DefaultTransactionManager.java:95)
> > > >>>
> > > >>> at
> > > org.apache.cayenne.tx.DefaultTransactionManager.performInTransaction(
> > > >>> DefaultTransactionManager.java:62)
> > > >>>
> > > >>> at
> > > org.apache.cayenne.tx.DefaultTransactionManager.performInTransaction(
> > > >>> DefaultTransactionManager.java:40)
> > > >>>
> > > >>> at org.apache.cayenne.tx.TransactionFilter.onSync(
> > > >>> TransactionFilter.java:61)
> > > >>>
> > > >>> at
> > > org.apache.cayenne.access.DataDomain$DataDomainSyncFilterChain.onSync(
> > > >>> DataDomain.java:834)
> > > >>>
> > > >>> at org.apache.cayenne.access.DataDomain.onSync(DataDomain.java:596)
> > > >>>
> > > >>> at org.apache.cayenne.access.DataContext.flushToParent(
> > > >>> DataContext.java:737)
> > > >>>
> > > >>> ... 2 more
> > > >>>
> > > >>>
> > > >>>
> > > >>
> > >
> > >
>
>
>
> --
> Best regards,
> Nikita Timofeev
>

Reply via email to