There's an entity Foo
with a @Version
column. If I want to delete it I expect Spring Data JPA and/or Hibernate to check whether the current value of the @Version
column matches the one in the database. If it does not, the deletion should be rejected. This works as expected with a detached entity:
@Transactional
public void delete(Foo foo) {
fooRepository.delete(foo); // throws ObjectOptimisticLockingFailureException
}
But if I load the entity first from the repository and then delete it within the same transaction using a different version the deletion passes regardless of the value of @Version
column:
@Transactional
public void delete(int fooId, long version) {
Foo foo = fooRepository.findOne(fooId);
foo.setVersion(version);
fooRepository.delete(foo); // passes regardless of value of version
}
When I look into the Hibernate debug output, the version comparison is performed (delete from foo where id=? and version=?
) but not with the effect I'm expecting.
What am I missing?