尽管使用 @Transactional(propagation=Propagation.REQUIRES_NEW) 获取 LazyInitializationException

Getting LazyInitializationException although using @Transactional(propagation=Propagation.REQUIRES_NEW)

我将 jHipsterSpring 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 异常。

可能是因为启动了一个新的事务,entityA变成了"detached",所以抛出了LazyInitializationException。

可以这样使用:

@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都是真的。