我将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都是如此。

07-24 09:54