我在wildfly 9.0.1中使用java batch(jsr-352)。步骤(基于块)访问实体的惰性字段的处理器。当处理器想要获取惰性字段时,我给LazyInitializationException
。当我在wildfly 11.0.0.Alpha1上运行它时一切正常。
在wildfly 9.0.1中,当我使用存储库获取此字段时,没有问题。如何使用存储库执行该操作?
阅读器:
public Object readItem() {
return answerRepository.findBy(23);
}
处理器:
public Object processItem(Object item) {
AnswerEntitiy answerEntitiy = (AnswerEntitiy)item;
//when i call answerEntitiy.getComment() LazyInitializationException throws
return commentRepository.findByAnswer(answerEntitiy); //works fine
}
作家:
public void writeItems(List<Object> items) {
//loops and casting
commentRepository.save(comment); //LazyInitializationException
}
这是完整的错误:
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.test.AnswerEntitiy.comments, could not initialize proxy - no Session
答案 0 :(得分:0)
我假设您使用JPA来获取您的实体。显然,加载评论的PersistenceContext在访问评论时不再可用,因此会出现该异常。
作为解决方案,您必须在与核心实体字段相同的上下文中加载注释。我看到了这些可能性: