【发布时间】:2015-07-28 16:17:58
【问题描述】:
我有一个带有休眠功能的应用程序。有两个主线程,第一个是收集/修改数据,第二个是保存数据到数据库,在某些情况下程序可能会尝试同时修改和保存实体。
我必须使所有实体线程安全(仅使用同步集合、原子对象而不是原语...)还是 hibernate 自动处理它?
【问题讨论】:
-
每次对话都需要一个 Hibernate 会话。您不应该在线程之间共享会话,因此不需要同步实体。
-
如果我需要在会话期间保存数据,我必须同步我的实体?
-
我给你的建议是花点时间阅读本书Java Persistence with Hibernate。但是,如果您每个对话有一个会话而不是同步,那么简短的回答对您没有帮助,因为来自一个会话的实体与另一个会话的实体不同,即使它们引用相同的数据库记录也是如此。在这些情况下,您需要以不同的方式解决问题,使用乐观或悲观锁定。但正如你可以猜到的,这在这里很难解释。去读那本书,它比在这里问任何问题都对你有帮助。
标签: java multithreading hibernate