10

H2 データベースとの統合テストを書いています。私のデータベース(生成された)の初期化には、このスクリプトが含まれています(生成された結合テーブルにはこの列がないため):

ALTER TABLE INT_USR ADD IU_INSDTTM TIMESTAMP DEFAULT NOW();

これは私がレコードを作成する方法です:

Integration integrationOne = createIntegration(firstId, "FIRST");
Integration integrationTwo = createIntegration(secondId, "SECOND");
flushAndClear();
userService.logRecentIntegration(integrationOne.getId(), user.getId());
flushAndClear();
userService.logRecentIntegration(integrationTwo.getId(), user.getId()); //1

メソッド logRecentIntegrations(.., ..) は DAO を呼び出すだけで、dao はこれを行います。

Query query = entityManager.createNativeQuery(
    "INSERT INTO INT_USR (USR_ID, INT_ID) VALUES (?, ?)");
query.setParameter(1, userId)
    .setParameter(2, integrationId);
query.executeUpdate();

後で私のテストで:

Query query = entityManager.createNativeQuery(
    "SELECT * FROM INT_USR ORDER BY IU_INSDTTM");
List resultList = query.getResultList();

このテストをresultListでデバッグすると、2つのレコード(正しい)がありますが、タイムスタンプは同じです。//1 とマークされた行にブレークポイントを挿入してしばらく待った場合でも、挿入間の時間差は大きくなります。(Thread.sleep - 同じ結果)

SQLスクリプトを次のように変更しようとしました

ALTER TABLE INT_USR ADD IU_INSDTTM TIMESTAMP DEFAULT CURRENT_TIMESTAMP;

しかし、同じ結果です。両方の結果のタイムスタンプが同じなのはなぜですか?

4

3 に答える 3

9

文書化されているように、関数 CURRENT_TIMESTAMPはトランザクション内で常に同じ値を返します。この動作は、PostgreSQL などの他のデータベースと一致します。

于 2013-03-01T21:44:37.370 に答える