使用线程时出现LazyInitializationException

时间:2013-07-19 08:41:01

标签: java multithreading hibernate concurrency

我在尝试从数据库中获取某些对象时遇到错误:

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注释,我没有任何问题。

1 个答案:

答案 0 :(得分:1)

Hibernate会话和从该会话加载的实体不是线程安全的。如果您尝试从不同的线程访问它们,您将遇到这种“奇怪”的例外。

大多数时候将事务与并发混合也是一个坏主意。