問題タブ [hibernate-envers]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
hibernate-envers - Envers 監査エンティティ
監査されたエンティティのリストを取得するより良い方法は何ですか? REVCHANGES テーブルを使用して、このテーブルからすべての監査対象エンティティを検索することは可能ですが、これは最善の解決策ではないと思います。
ありがとう、ヴォロディミール
hibernate-envers - Map<>の「変更」の代わりに「追加」+「削除」編集を生成するEnvers
Map<MyEnum, String>
監査対象として宣言されたフィールドがあります。マップ内の要素の1つに変更が加えられると、enversは1つではなく、anADD
とaの2つの編集を生成します。これは、2つの編集があるため、監査テーブルに挿入しようとしたときに制約違反を意味します。同じリビジョンの単一エンティティの単一フィールドの場合。DEL
MOD
テーブルのキーの一部を作成することで問題を回避できると思いrevision_type
ます(エンティティごとにフィールドごとに各タイプを1回編集できます)が、それは醜いハックのようですが、それを追跡できなくなるという事実もあります最初に起こった、そしてそれがちょうど間違っているという事実。
ちなみに、フィールドは適切に永続化されています...失敗するのは監査レコードだけです。
フィールドの宣言:
Hibernatev3.5.6を使用しています。
これに関するバグレポートを見つけることができなかったので、私は何か間違ったことをしていると思っています...何かアイデアはありますか?
hibernate - Hibernate: ロギング用にプロパティを設定する必要があります
Hibernate Envers を使用してログを記録していますが、履歴を追跡しているオブジェクトにイベントのタイプを設定する必要がありました。null
プロパティは必須であるため、設定されていないたびに配置するという考えがありましたlastEvent
。
そこで、プロパティを設定しようとしました@PrePersist
しかし、どうやら休止状態は、これらのインターセプターがオブジェクトをダーティかどうかとしてマークすると見なします。したがって、このコードがダーティ チェックで実行されたときは、オブジェクトで何も変更されていない場合lastEventModified
でもfalse
、毎回lastEvent
に設定されます。null
Hibernate の EventListeners でも試してみましたが、それらはトランザクションの外部で実行され、プロパティを設定できましたが、データベースに保存されませんでした。
どちらの解決策も正しくないように感じますが、この問題を最善の方法で解決する方法がわかりません。
java - 特定のリビジョン番号に固執する
Hibernate Envers のドキュメントを読みましたが、以下を機能させる方法がわかりませんでした:
Address と Order という 2 つのエンティティがあります。注文には住所があります。
注文が作成されたときに、現在の住所リビジョンに固執するようにしたいので、同じ住所が変更された場合 (新しいリビジョンが生成された場合)、注文は作成時の住所リビジョンを指し続けます。
どうすればこれを達成できますか?
java - Hibernate Envers: 日付に基づいて Aud テーブルを切り捨てることは可能ですか?
1) Envers 監査証跡の範囲を制限する方法はありますか?
Envers が最適な 1 週間の監査証跡が必要ですが、その期間を超えたデータ保持に関する契約上の義務もあります。
1.1) RevisionTime に基づいて _AUD テーブルを切り捨てるように envers を設定することは可能ですか?
1.2) 時限クエリを使用してデータベースから直接データを削除すると、休止状態が崩れたり不平を言ったりしますか? または、監査履歴を削除するための代替の API フレンドリーな方法はありますか?
java - Hibernate Envers を使用して結合テーブルと関連エンティティを監査しない方法は?
Hibernate Envers を使用してエンティティを監査しています。
Foo
プロパティとしてを持つ監査済みエンティティ が 1 つありList<Bar>
ます。Bar
ただし、エンティティを監査したくありません。したがって、私は次のように書きました。
今、私はのリビジョンを取得したいFoo
:
残念ながら、すべてのデータを取得したい場合 (つまり、 を遅延ロードする場合)、クエリを実行しようとしたときbars
にエラーが発生します。ORA-00942: table or view does not exist
を使用する@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)
と、Hibernate Envers は現在のエンティティのBar
アイテムとのリンクを保持すると思いました。
T_BAR
では、テーブルとT_FOO_BAR
(結合テーブル)を明示的に監査することなく、どうすれば問題を解決できますか? つまり、bars
リビジョン エンティティからのリストを取得すると、現在のエンティティから のリストが取得されます (とbars
の間のリンクは監査されないため)。Foo
Bar
ありがとう。
java - envers を使用するコードの Junit を作成するには?
バージョンが維持されているかどうかを確認するためにJUnitを作成します(イベントで)。JUnitを使用して行ったことは次のとおりです。
dao の削除を呼び出すと、
UnsupportedOperationException: 読み取り専用オブジェクトに書き込めません
キャッシュにはEhcacheを使用しています。CacheConcurrencyStrategy
問題をグーグルで調べたところ、削除したいドメインオブジェクトの設定が間違っていることが原因である可能性があることがわかりました。私がチェックしました。
ドメイン オブジェクトには がありませんでしCacheConcurrencyStrategy
た。しかし、ネストされたオブジェクトは次のようにCacheConcurrencyStrategy
設定されていましたREAD_WRITE
(これが本当の犯人かもしれません)。
しかし、既存のドメインと既存のコードを変更したくありません。CacheConcurrencyStrategy
JUnitをバイパスする方法はありますか? そうでない場合、既存のコードを変更せずに解決する方法はありますか?
java - envers を使用して各エンティティの最新リビジョンを一覧表示する
削除されていないすべてのエンティティの最新リビジョンを取得しようとしています。SQL でこれを行うのは、サブセレクトを使用すると非常に簡単です。
しかし、envers API を介してこれを実装する方法はわかりません。私はAuditReaderから始めましたが、個別のオブジェクトを選択する方法が見つかりませんでした
重要: 多くのリビジョンを含む多くの記事 (エンティティ) があるため、1 つまたは少なくとも 2 つのクエリでこれを実行したいと考えています。
どうもありがとう!
spring - Hibernate rev エンティティに現在のユーザーを挿入する方法
プロジェクトでSpring 3.1、JPA 2、およびSpring Data JPA(Hibenrate 4.1)を使用し、Hibernate Envers(Hibernate 4に付属)を使用していくつかのプロパティを監査しました。現在ログインしているユーザーを関連するrevテーブルに保存したいのですが、どのようにこれを実装するには?ありがとう。
hibernate-envers - Hibernate Envers - org.hibernate.exception.ConstraintViolationException: JDBC バッチ更新を実行できませんでした
監査目的で Hibernate Envar を使用しています。
これが私のコードと構成です
hibernate.cfg.xml ファイルの構成
@Audited で注釈が付けられた 1 つのサンプル エンティティ
ログインしているユーザーの監査をログに記録するための RevisionEntity を作成しました。
ここに私のリスナークラスがあります
挿入/削除の場合、正常に機能します。
ただし、更新クエリの場合、次の例外が発生します
すべてのエンティティの一般的な更新コードは次のとおりです