java - Spring + Hibernate + JPA 在 JUnitTest 时, 不发出insert语句
高洛峰
高洛峰 2017-04-17 17:40:40
0
2
858

单元的测试方法为:

@Test
@Transactional(propagation=Propagation.REQUIRED)
@Rollback
public void test() {
    userCreateService.saveUsers(2392L, "@abc.com", true, "A", new Long[]{129L, 1L, 2L, 131L, 4L}, 5);
}

设置了事务, 进入了方法里面, 调用javax.persistence.EntityManager.persist()方法都是不提交insert语句.

发个例子说明一下:

我想要插入一个user到数据库, 然后立刻把他的OPENID字段使用Oracle的sys_guid()函数来生成, 所以persist后, 调用本地查询语句来修改.
发现修改语句一直说修改了0个结果, 我查了一下Hibernate的SQL语句输出, 发现没有发出过insert语句. 这是为何呢?

请各位大神帮忙...............

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(2)
大家讲道理

雷雷

黄舟

参考:

TestContext 框架解决了这个问题。默认情况下,框架将为每个测试创建并回滚一个事务。您只需编写可以假设事务存在的代码即可。如果您在测试中调用事务代理对象,它们将根据其事务语义正确运行。此外,如果测试方法在事务中运行时删除了所选表的内容,则事务将默认回滚,并且数据库将返回到执行测试之前的状态。通过测试应用程序上下文中定义的 PlatformTransactionManager bean 向您的测试类提供事务支持。

如果您想要提交事务 - 不常见,但当您想要特定测试来填充或修改数据库时偶尔有用 - 可以指示 TestContext 框架导致事务提交,而不是通过 @TransactionConfiguration 和 @Rollback 回滚注释.

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板