2016-08-30 7 views
2

Hibernateを3.3.2.GAから4.3.11.Finalにアップグレードすると、監査テーブルを照会する際に「EntityNotFoundException」が発生します。Hibernate Envers:ManyToOne関係にエンティティが見つかりません

マイモデル:

@Entity 
@Audited 
public class A { 
    [...] 
    @ManyToOne 
    @JoinColumn(name = "B_ID", nullable = false) 
    private EntityB entityB; 
    [...] 
} 

@Entity 
@Audited 
public class B { 
    [...] 
} 

私はデータベース(SQLServerの)内の監査テーブルをチェックするとき、私は私の例外の理由を参照してください。

select * from A_AUD where id = 1 => 1 result with VER_REV = 100 (and B_ID = 10) 
select * from B_AUD where id = 10 => 2 results with VER_REV = 200 and 300 

私はJPAをロードしよう:

getAuditReader(anEntityManager).createQuery().forRevisionsOfEntity(A.class false, true).add(AuditEntity.id().eq(1)); 

Hibernateは遅延ロードB_AUDです。しかし、クエリでは、彼はVER_REV < = 100をチェックしています。 結果が見つかりません。

休止状態3でチェックインしていなかった私のデータの問題ですか? これはコードで解決できますか?

私はのようないくつかの答えの要素を見つけましたが、この問題の「良い習慣」を見つけることができません。 データベース内のVER_REVを更新すると、他のエンティティに影響を与える可能性があります(私のモデルは少し複雑です)。そして、 "パッチ適用" Enversは最後の解決策でなければなりません。

ご回答いただきありがとうございます。

+0

Hibernate Envers固有のブートストラップを使用する構成設定を含めることができますか?あなたのポストのコレクションの 'EntityB'側からの正確なマッピングも含めることができますか? – Naros

答えて

0

ハイバネート3でチェックインしなかったデータが問題ですか?または、これはコードで解決できますか?

これは必ずしもコードの問題またはデータの問題ではありません。

エンティティAが変更されても、その変更がエンティティBの状態に影響を与えないため、最初のリビジョンではエンティティAにのみリビジョンレコードが保存されます。 VER_REV = 100

は後で時間内にいくつかの将来の時点で、2つの変更が変更されたエンティティB前者のシナリオのような多くは、これらの変更は、エンティティAに影響を与えないことを発生し 、したがってこれらのエンティティBの変更が持っている理由VER_REV = 200

コンフィグレーション&のマッピングを理解すると、より具体的な内容でコメントを追加してこの回答を更新できます。

関連する問題