Hello, I am currently using cayenne 4.2 and am running into some issues
when committing my changes. We have an application that uses a single
object context to do all the necessary changes we want to save to the
database and then when the user clicks the save button we call the
objectContext.commit(). The issue is that if a commit exception happens
during this process we end up with half committed data as the transaction
doesn't get rolled back. From what I understand, if I were to capture
the exception and do objectyContext.rollbackChanges it would only remove
the changes to the object context, not actually rollback the changes in
the database. I also tried a mixture of this example provided for
transactions in the cayenne documentation
<https://cayenne.apache.org/docs/4.2/cayenne-guide/>and this example at the
bottom from apache
<https://nightlies.apache.org/cayenne/docbook/index/persistent-objects-objectcontext.html>.
Essentially I'm calling the runtime.performInTransaction and inside of the
TransactionOperation using the BaseTransaction.getThreadTransaction()
method to get the transaction, then calling the objectContext.commit and
after calling that method doing transaction.commit(). Iif an exception
happens I call transaction.rollback() but once it's all done I still see
the changes that were sent before the exception present in the database and
when I look at the logs of the SQL that gets sent I don't see a transaction
started. My question is am I using the transaction correctly or how do I
get all the changes in the object context to be reversed if an exception
happens?

Reply via email to