我在数据库中有一个实体User
。我想了解Hibernate / JPA事务如何管理表数据的读/写锁定以避免过时的数据。
例如:
T1
从数据库中读取User
T2
从数据库中删除相同的User
在User
中读取T1
会怎样?
答案 0 :(得分:0)
对于T1,他仍在读取对象,直到会话被刷新或对象被驱逐或对象从垃圾回收中删除 但对于使用数据库的第一次操作,它会抛出异常。
对于T2他无法读取对象 我希望我的回答对你有用
答案 1 :(得分:0)
在做了一些研究并阅读了几篇博客之后,我找到了一个有趣的博客http://javabeginnerstutorial.com/hibernate/concurrency-control-with-hibernate-4/来回答这个问题。 Hibernate没有对锁定和事务管理做任何特别的事情,它利用底层数据库实现来锁定记录。虽然我们可以通过在实体中添加版本字段来使用乐观锁定和版本控制字段来防止此类并发修改问题。每次此版本在更新操作时增加并拒绝任何具有较低版本的实体,然后在数据库中进行更新。