Not throwing Optimistic Lock when the entity is attached

Description

Hi

Hibernate is not throwing Optimistic Lock when the entity is attached. It happens when the business rule sets a version in the attached entity that is less than its original (from database) version value.

Take the following code as an example of the bug.
// inserts A
A a1 = new A();
a1.setName("A1");
dao.persist(a1);
dao.flush();
dao.clear();

// as expected, the piece of code below works just fine
final A a2 = dao.find(A.class, new BigDecimal(1));
a2.setName("A2");
dao.merge(a2);
dao.flush();
dao.clear();

// as expected, this code fails due to Optimistic Lock
try{
final A a3 = dao.find(A.class, new BigDecimal(1));
dao.clear();
a3.setName("A3");
a3.setVersion(0); //database verison is 1
dao.merge(a3);
dao.flush();
Assert.fail();
}catch (Exception e) {
System.out.println(e.getMessage());
// ignore
}finally{
dao.clear();
}

// unexpectedly, the piece of code below also works..
// even with the version being less than the one in the database
// Note that this happens because hibernate is holding internaly the original version of the entity.
// Even when the version is manually changed it keeps using the original one.
final A a3 = dao.find(A.class, new BigDecimal(1));
a3.setName("A3");
a3.setVersion(0); //database verison is 1
dao.merge(a3);
dao.flush();
dao.clear();

This problem can be handled by the business rule. For example, whether the version that comes from the screen is smaller than the one from the database it could throw an Optimistic Lock exception. However, it it was not handled, hibernate must take care of this in the same way it does with detached objects.

Environment

windows XP, jboss 4.3 EAP, hibernate 3.4.2.sp1

Activity

Show:
Gail Badner
July 11, 2010, 9:29 PM
Edited

Does this happen using 3.5.3?

Fernando Rubbo
July 12, 2010, 1:53 PM

Haven't tried this because we use JBoss 4.3 EAP and we are not allowed to change libraries in order to keep Red Hat support.

Strong Liu
February 2, 2012, 6:17 AM

can't reproduce it in hibernate 4.x, so, reject it here, if you still have such issue in your EAP, please make a contact with your EAP support and create a support case, thanks

Brett Meyer
March 7, 2014, 5:30 PM

Bulk closing rejected tickets in "resolved" state.

Assignee

Strong Liu

Reporter

Fernando Rubbo

Fix versions

None

Labels

None

backPortable

None

Suitable for new contributors

None

Requires Release Note

None

Pull Request

None

backportDecision

None

Components

Affects versions

Priority

Minor
Configure