I am using 4.0.M3. I used the following solution, but the problem is that after commitChanges() the dataobjetcs are set to PersistenceState.COMMITED, if the stored procedure fails Cayenne does a DB rollback (that's ok), but dataobjects stay COMMITED, so I can not retry the this transaction after errors are solved. Is there any way to revert the persistenceState to their values before commitChanges if I detect the stored procedure failed ?
cayenneRuntime.performInTransaction(new TransactionalOperation<Integer>() { @Override public Integer perform() { context.commitChanges(); //... SQLTemplate s = new SQLTemplate("SELECT pkg_inventario_fisico.apply( #bind($idAlmacen, 'VARCHAR')) AS id", true); s.setParamsArray(a); @SuppressWarnings("unchecked") List<DataRow> rows = CayenneDao.instance.context.performQuery(s); DataRow row = rows.get(0); //... return null; } } ); Atte. Juan Manuel Díaz Lara On Monday, April 11, 2016 10:06 AM, Mike Kienenberger <mkien...@gmail.com> wrote: See the bottom part of this page starting at "In the second scenario": https://cayenne.apache.org/docs/4.0/cayenne-guide/persistent-objects-objectcontext.html#transactions On Mon, Apr 11, 2016 at 10:54 AM, Juan Manuel Diaz Lara <jmdia...@yahoo.com.invalid> wrote: > > > I have a dataobjet graph with some changes, and a db stored procedure that >should run after this changes are in the db, but must run in the same >transaction because it make some more changes to other data, this changes can >fail so I want the commitChanges fail if the stored procedure fails. > Atte. Juan Manuel Díaz Lara > > > >