Hibernate - Version属性调用自动更新更改?

时间:2014-03-26 13:46:59

标签: java hibernate jpa orm

当检索实体并以编程方式操作它们的某些属性时,将调用自动更新,而hibernate在递增我的db生成的版本列时不会手动调用session.update()。 (甚至验证发生) 我对我的高版本值和验证感到惊讶。

Hibernate 4.3.1

实体仍然附加到会话。

的伪代码:

Session session = sessinFactory.openSession();
Transaction tr = session.beginTransaction();

Entity entity = session.get(Entity.class, 1);

entity.setFoo("foo");

tr.commit();
session.close(); // here fake-update takes place

问题:

这是一个功能吗?

我可以尝试分离我要操纵的实例。

或者这是一个错误吗?对我来说它更像是一个bug,因为我没有调用更新。但不是虚假更新。

1 个答案:

答案 0 :(得分:1)

是的,这是一个功能。当调用tr.commit()时,会话被刷新。检查与会话相关联的每个对象以查看它是否“脏”(已更改状态)。无论是否调用显式保存,每个更改的对象都将保留到数据库。此外,如果实体是脏的,Hibernate将在刷新期间自动增加版本属性。