Hi,
I have a usecase where I need to write the updated entity version to the database before commiting the transaction:
1. Change entity field e.g. from a to b
2. Create a change entry in database containing the new version of the entity
So I need to access the version of an updated entity inside the transaction before commiting it. How can I achieve this? If I add something to a collection field of the entity ObjectDB seems to update the version field automatically. But if I just set a String field it doesn´t. I tried transaction.flush() in combination with transaction.refresh(entity) which works but I wonder if there is an easier approach.
My fake code is:
Transactional transactional = context.getInstance(Transactional.class); String id = transactional.execute(transaction -> { Flight flight = transaction.createEntity(Flight.class); // flight.version is 1 return flight.getId(); }); transactional.execute(transaction -> { Flight flight = transaction.getEntity(id, false); flight.setTitle("New"); // here I need to access the new version, but I get still 1 transaction.flush(); transaction.refresh(flight); // now I get the right version 2 }); transactional.execute(transaction -> { Flight flight = transaction.getEntity(id, false); flight.addTicket("1"); // in this case ObjectDB seems to automatically update the version since it returns 3 here });
Hint: transactional.execute() just creates a transaction (entityManager.getTransaction().begin();) and commits it automatically at the end (entityManager.getTransaction().commit();).
Thanks for your help!
Best wishes,
Markus