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

时间:2016-09-25 02:32:42

标签: java hibernate spring-transactions lazy-initialization

我将 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一个我不明白的感受。

  • 虽然该方法是在自己的事务中运行的,但为什么会抛出这个问题呢?
  • 当会话仍然打开时,它是否应该只是延迟加载列表?

1 个答案:

答案 0 :(得分:1)

可能是抛出了LazyInitializationException,因为启动了一个新事务并且entityA变为&#34; detached&#34;结果。

可以使用这样的东西:

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