是否可以并行初始化多个惰性集合?

时间:2015-03-20 17:39:51

标签: java multithreading hibernate jpa

我正在维护现有代码,并且我找到了以下代码来初始化一些惰性集合。

user.getListOne().size()
user.getListTwo().size()
user.getListThree().size()

它运作良好,但问题是顺序的,我想我可以将它并行化。

我尝试创建自己的线程,但是我收到了警告,所以我想用自己的线程做这个是不可能的:

  

错误org.hibernate.AssertionFailure - HHH000099:断言失败   发生(这可能表示Hibernate中存在错误,但更有可能是因为   不安全地使用会话)org.hibernate.AssertionFailure:   可能的非线程安全访问会话

有没有办法使用JPA / Hibernate并行初始化集合?

1 个答案:

答案 0 :(得分:2)

你做不到。 EntityManager不是线程安全的,因此在您的并行'期间不应该从多个线程访问它。初始化,EM是负责这些列表的人口。

您可以使用查询提示或实体图表在对象检索期间强制急切加载集合。