我将jHipster与Spring Data JPA结合使用,并具有以下方法:
@Transactional(propagation=Propagation.REQUIRES_NEW)
public void doSomeWork(EntityA entityA) {
// some code
List<EntityB> entityBList = new ArrayList<EntityB>();
entityBList.add(new EntityB());
entityA.addAllEntityB(entityBList);
}
在最后一行,我得到了一个我不理解的
org.hibernate.LazyInitializationException
专有名词。尽管该方法在其自己的事务中运行,但为什么会抛出此异常?
它是否应该不仅仅因为会话仍处于打开状态而延迟加载列表?
最佳答案
可能是因为启动了新事务而导致实体LazyInitializationException异常,并且实体A被“分离”。
一个人可以这样使用:
@Transactional
public void addEntityB(long entityAId, entityB) {
EntityA entityA = loadEntityA(entityAId);
addEntityBToEntityA(entityA, entityB);
saveEntity(entityB);
}
以这种方式从外部呼叫:
for (EntityB entityB : entityBList) {
try {
addEntityB(entityAId, entityB);
}
catch(Exception e){
log(e);
}
}
确实,每次您加载entityA都是如此。