当前位置: 首页 > 知识库问答 >
问题:

如何测试Hibernate会话是否打开?

江坚成
2023-03-14

我面临交易错误,例如:

org . hibernate . lazyinitializationexception:无法延迟初始化角色集合:app。Parent.children,无法初始化代理-没有会话

这里在父母上得到孩子().大小()

但我对@Service方法有@Transactional

  • 1个事务在createFactory()上创建工厂并给实体管理器
  • 1个事务在create()上创建实体
@Path("api/parents")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
@Controller
public class ParentResource {

    @Autowired
    private ParentService parentService;

    @POST
    public Parent create(Parent parent) {
        ParentFactory parentFactory = parentService.createFactory(parent);
        return parentService.create(parent);
    }

}

@Service
public class ParentService {

    @PersistenceContext
    private EntityManager em;

    @Transactional
    public ParentFactory createFactory(Parent parent) {
        return new ParentFactory(parent, em);
    }

    @Transactional
    public Parent create(ParentFactory parentFactory) {
        return parentFactory.create();
    }

}

// No Transactional annotation
public class ParentFactory {

    private Parent parent;
    private EntityManager em;

    public ParentFactory(Parent parent, EntityManager em) {
        this.parent = parent;
        this.em = em;
    }

    public parent create() {
        if(parent.getChildren().size() < 3) { // Exception here
            em.persist(this.parent);
        }
    }

}

我希望能够测试我的Hibernate会话何时处于活动状态,这样我就可以检查它何时丢失以及丢失的原因。

谢谢!

共有2个答案

邓浩漫
2023-03-14

尝试使用session.getTransaction(). isActive()

梁丘霖
2023-03-14

我认为处理您的需求的最佳方法是在子属性上使用jpa validator@Size(min=3)

 类似资料:
  • 我有下面的方法,每隔几秒钟插入一大批记录。运行一段时间后,我得到如下错误: 错误:通信链接失败 从服务器成功接收的最后一个数据包是523毫秒前。上次成功发送到服务器的数据包是8毫秒前。 May 16, 2013 9:48:30 AM com.mchange.v2.c3p0.stmt.GooGooStatementCache checkinStatement INFO: 签入语句问题,丢弃。 com

  • 下面是Spring3.x和Hibernate3.x上的一个假设情况 我在Spring有一个服务层,它调用3个DAO来构建一个模型。DAO 是事务性的(@Transactional),并且具有延迟加载的Hibernate集合。 该服务方法会导致一些更新,以及数据的获取。 典型的DAO方法如下- 我有以下关于OSIV的问题 - 1.在默认的AUTO模式下,此会话刷新(数据库更新)多少次? 2.是否可以

  • 我正在构建一个反向代理服务器,它将授权http请求并将其传递给一些内部API。 我根据DB中的条目授权传入请求。 这个项目中的性能是优先的——反向代理服务器不应该增加太多响应时间。 简而言之: 我正在使用来查询数据库。我在Spring配置中的init期间打开Hibernate会话: 然后我将会话注入DAO层,并在read方法中使用它: 正如您所看到的,我并不是在每次DAO调用中都关闭/打开会话。我

  • 问题内容: 如何检查会话是否无效?API中没有方法。 一样吗?如果没有,有什么区别? 问题答案: 如果您想根据请求知道它是否有效: 如果您存储了对该会话的引用并需要验证,我会

  • 问题内容: 我的项目架构是带有Spring集成和JPA / Hibernate的Struts2。StrutsSpringTestCase基类用于JUnit集成测试。 在正常情况下,web.xml中的以下配置从每个请求的开始到结束都保持单个会话打开: 结果,所有延迟加载都可以在所有服务中正常工作。例如: 现在…当我尝试运行集成测试时会出现问题,这些测试独立于web.xml中的OpenEntityMa

  • 我在学习冬眠时遇到了一个问题。我写了UnitTest和那里我尝试添加对象到DB。所有选择都正常工作,但插入不正常。 我也尝试过这样的东西 它引发了一个异常,事务没有成功启动,但它添加了用户 这里有一个例外 组织。springframework。交易TransactionSystemException:无法回滚Hibernate事务;嵌套的异常是org。冬眠TransactionException: