検索

ホームページ  >  に質問  >  本文

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

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

高洛峰高洛峰2804日前853

全員に返信(2)返信します

  • 大家讲道理

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

    リーリー

    返事
    0
  • 黄舟

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

    参考:

    TestContext フレームワークはこの問題に対処します。デフォルトでは、フレームワークはテストごとにトランザクションを作成し、ロールバックします。トランザクションの存在を想定できるコードを記述するだけです。テストでトランザクション的にプロキシされたオブジェクトを呼び出すと、それらはトランザクション セマンティクスに従って正しく動作します。さらに、テスト メソッドがトランザクション内での実行中に選択したテーブルの内容を削除した場合、トランザクションはデフォルトでロールバックされ、データベースはテストの実行前の状態に戻ります。トランザクション サポートは、テストのアプリケーション コンテキストで定義された PlatformTransactionManager Bean を介してテスト クラスに提供されます。

    トランザクションをコミットしたい場合 - 通常ではありませんが、特定のテストでデータベースにデータを入力または変更する場合に便利な場合もあります - TestContext フレームワークに、@TransactionConfiguration および @TransactionConfiguration を介してロールバックの代わりにトランザクションをコミットさせるよう指示できます。 @ロールバックアノテーション。

    返事
    0
  • キャンセル返事