Raf*_*fal 6 java multithreading hibernate
我在理解Hibernate. 我知道它们Hibernate Sessions本身并不是线程安全的,所以我不会从多个线程访问它们。但是,我找不到有关 Hibernate 实体的线程安全性的任何信息。我可以在多个线程中修改它们,而它们仍然连接到用于加载它们的 Session 吗?
我不会使用延迟加载(我知道这会导致并发问题)。实体将被正确同步,hibernate 将通过同步的 getter 访问它们。
我设想的场景:
这取决于修改的性质。如果您通过在另一个线程中创建、保存和关联另一个实体来修改一个实体,那么它将不起作用,因为另一个实体实例将在第一个线程中被视为分离。
撇开上面的用例不谈,这在理论上应该有效,并且只有在您不使用字节码检测进行脏检查时才有效。Hibernate只会在需要刷新对象时检查对象是否脏;基本上,它不关心你如何修改对象。
但是,不建议这样做。
首先,它可能与 Hibernate/JPA 的未来版本不兼容(可能有更多限制阻止对实体的并发访问)。
其次,解决方法相当简单:只需为要并发修改的数据创建 DTO,提交进行处理,并在处理完成后更新实体即可。这样,代码更加清晰,不会出现意外的 Hibernate 线程相关投诉,并且您可以灵活地使用其他有用的功能,例如延迟加载。
| 归档时间: |
|
| 查看次数: |
3880 次 |
| 最近记录: |