java - 尽管使用 @Transactional(propagation=Propagation.REQUIRES_NEW) 但出现 LazyInitializationException

标签 java hibernate spring-transactions lazy-initialization

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

  • 尽管该方法在自己的事务中运行,但为什么会抛出此异常?
  • 当 session 仍然打开时,它不应该只是延迟加载列表吗?

最佳答案

可能会引发 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);
  }
} 

不过,您每次都会加载实体A,这是事实。

关于java - 尽管使用 @Transactional(propagation=Propagation.REQUIRES_NEW) 但出现 LazyInitializationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39682843/

相关文章:

java - 使用注解在 Spring Hibernate 中编写更少的 DAO

java - spring-hibernate事务不回滚

java - Spring @transactional 不起作用

java - JPA存储库org.hibernate.LazyInitializationException : could not initialize proxy - no Session

java - 正常关闭 Grizzly 服务器的正确方法是什么? (嵌入 Jersey )

java - 在 Apache Flink Broadcast 流中应用基于窗口的规则

java - Spring DATA JPA + Hibernate - 无法初始化代理 - 修复 : 后没有 session

java - spring 中不同事务管理器的嵌套事务

JavaFX - 无法加载外部 CSS 主题

java - LibGDX:垂直滚动纹理