搜尋

首頁  >  問答  >  主體

java - Spring + Hibernate + JPA 在 JUnitTest 时, 不发出insert语句

单元的测试方法为:

@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语句. 这是为何呢?

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

高洛峰高洛峰2808 天前863

全部回覆(2)我來回復

  • 大家讲道理

    大家讲道理2017-04-17 17:42:40

    雷雷

    回覆
    0
  • 黄舟

    黄舟2017-04-17 17:42:40

    參考:

    TestContext 框架解決了這個問題。預設情況下,框架將為每個測試建立並回滾一個交易。您只需編寫可以假設交易存在的程式碼即可。如果您在測試中呼叫事務代理對象,它們將根據其事務語義正確運行。此外,如果測試方法在交易中執行時刪除了所選表的內容,則交易將預設回滾,並且資料庫將返回執行測試之前的狀態。透過測試應用程式上下文中定義的 PlatformTransactionManager bean 向您的測試類別提供事務支援。

    如果您想要提交事務 - 不常見,但當您想要特定測試來填充或修改資料庫時偶爾有用 - 可以指示 TestContext 框架導致事務提交,而不是透過 @TransactionConfiguration 和 @Rollback 回滾註解.

    回覆
    0
  • 取消回覆