我在尝试从数据库中获取某些对象时遇到错误:
org.hibernate.LazyInitializationException (LazyInitializationException.java:19) - could not initialize proxy - no Session
但是我只在使用线程时遇到错误。我们的应用程序结构方法调用流程为:
FacadeImpl.saveRV() -->
@Transactional
@ParallelContext
BusinessImpl.validateEntry() -->
BusinessImpl.getOpMap() -->
@ParallelTask
DAOImpl.getMEFilter()
尝试访问获取的实体的字段时,我得到LazyInitializationException,定义为:
// bi-directional many-to-one association to PtoConex
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "IDN_PTO_CONEX", insertable = false, updatable = false)
private PtoConex progTptoConex;
但是,如果我从@ParallelContext
的{{1}}和BusinessImpl.validateEntry()
声明中删除@ParallelTask
注释,我没有任何问题。
答案 0 :(得分:1)
Hibernate会话和从该会话加载的实体不是线程安全的。如果您尝试从不同的线程访问它们,您将遇到这种“奇怪”的例外。
大多数时候将事务与并发混合也是一个坏主意。