Java 验证场景的事务性Spring Junit4测试用例

Java 验证场景的事务性Spring Junit4测试用例,java,hibernate,spring,jpa,junit4,Java,Hibernate,Spring,Jpa,Junit4,我使用Spring,JPA使用hibernate作为服务->dao层。 事务是spring管理的。 我有一个validation testcase,其中,我需要验证重复数据插入并引发异常 在我的测试用例中,它是 我已经为事务管理器配置了@TransactionConfiguration,其中defaultRollback为true,bean名称为(在我的例子中,它是JpaTransactionManager的一个bean) 我按照以下步骤执行这个测试用例 通过调用dao.Create(entit

我使用Spring,JPA使用hibernate作为服务->dao层。 事务是spring管理的。 我有一个validation testcase,其中,我需要验证重复数据插入并引发异常

在我的测试用例中,它是

我已经为事务管理器配置了@TransactionConfiguration,其中defaultRollback为true,bean名称为(在我的例子中,它是JpaTransactionManager的一个bean)

我按照以下步骤执行这个测试用例

  • 通过调用dao.Create(entity)创建记录;(这将成功)

  • 创建相同的记录(所有属性与步骤1中设置的相同)并调用dao.Create(entity)(这必须失败,但不是失败)

  • 在我的create(entity)方法中,我调用validate()方法,该方法触发标量对象查询(JPQL)进行验证

  • 我预计验证会失败,但这毫无例外,重复数据会插入到数据库中

    我试着调试(启用了hibernate日志),我发现select查询(标量查询)无法获取正确的数据(理想情况下,它应该至少获取1条记录,因为我在上面列出的步骤1中为它插入了数据)

    在选择查询进行验证之前,我在日志中看到了步骤1的插入查询

    对于这种涉及spring/jpa和hibernate的场景,有没有其他方法来编写测试用例

    请发表你的观点


    提前谢谢

    请将测试粘贴到这里,我相信每个测试都在自己的事务中运行,并且默认回滚为true。这应该是问题所在