首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >虽然使用@Transactional(propagation=Propagation.REQUIRES_NEW),但还是获得了LazyInitializationException

虽然使用@Transactional(propagation=Propagation.REQUIRES_NEW),但还是获得了LazyInitializationException
EN

Stack Overflow用户
提问于 2016-09-25 02:32:42
回答 1查看 736关注 0票数 0

我使用jHipsterSpring数据JPA,并有以下方法:

代码语言:javascript
复制
@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的要求,我不明白。

  • 尽管方法在它自己的事务中运行,但它为什么要抛出这个附加项呢?
  • 当会话仍然处于打开状态时,它不应该只是延迟加载列表吗?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-25 18:29:39

可能是因为启动了一个新事务而抛出了LazyInitializationException,结果是entityA变成了“分离”。

一个人可以使用这样的东西:

代码语言:javascript
复制
@Transactional
public void addEntityB(long entityAId, entityB) {
  EntityA entityA = loadEntityA(entityAId);
  addEntityBToEntityA(entityA, entityB);
  saveEntity(entityB);
}

以这种方式从外面召唤:

代码语言:javascript
复制
for (EntityB entityB : entityBList) {
  try {
    addEntityB(entityAId, entityB);
  }
  catch(Exception e){
    log(e);
  }
} 

不过,您确实每次都加载entityA。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39682843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档