我正在使用hibernate和Spring来控制事务。
我目前有一个Object Foo ,我想在更新它之前从数据库中读取它。像这样的东西
@Transactional(isolation = Isolation.READ_COMMITTED)
public void update(Foo beingUpdated) {
Foo beforeUpdate = fooDao.read(beingUpdated.getId());
checkDifferences(beingUpdated, beforeUpdate);
fooDao.update(beingUpdated);
}
但我的问题是当我读 Foo 时,返回的对象是正在更新的对象,而不是提交的对象。我误解了隔离的使用吗?如何读取在数据库中提交的对象,而不是正在更新的对象?
感谢任何帮助。
答案 0 :(得分:2)
以下是一些选项:
@Transactional(propgation=REQUIRES_NEW)
的方法,该方法将为您提供该方法的新会话。这会增加数据库开销:您需要重新加载实体。这些选项都不是很可口,但我在一些地方成功使用了1和3。