問題タブ [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 - Hibernate envers が機能しない
エンティティを監査するために休止状態の envers を使用したいだけです。 -Final.jar および hibernate-jpa-2.0-api-1.0.0.Final.jar。
私のエンティティは以下です
ユーザー.java
これは、envers を構成したアプリケーション コンテキストです。
applicationContext.xml
アプリケーションの実行時にエラーは発生しませんが、ユーザーの追加または削除時に作成される監査テーブルもありません。他に必要な構成はありますか?
アップデート
このようにアプリケーションコンテキストを編集するだけです
applicationContext.xml
ご協力ありがとうございました
hibernate-envers - 休止状態の環境での監査履歴の表示
Hibernate Enversを初めて使用します。各エンティティの監査テーブルを正常に作成しましたが、各エンティティのこれらの履歴を読み取る方法がわかりません。この履歴をjspで表示したい。その特定のすべての履歴を読み取りたい。 entity.any bodyは、それがどのように行われるかを知っています。
java - HibernateEnversの監査-「削除」は監査されません。「追加」の後に「多数の」「編集」レコードが追加されます。
エンティティ(「Something」)があり、ManyToOneが「ListOfSomething」および「SomethingSource」にマッピングされています。ManyToOne関連フィールドを@Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED)でマークしました。
エンティティを削除した後、Something_Audテーブルにレコードは作成されません。エンティティを追加した後-Something_Audテーブルにいくつかのレコードが追加されます。単一の「add」レコードと、一致するListOfSomething内のエンティティの数と同じ数の「edit」レコードです。
何が間違っているのですか?必要に応じて、より多くの情報を喜んで提供します。
hibernate - Hibernate envers、削除後のイベントが制約違反の例外をスローする
プロジェクトは、監査に Hibernate 3.5、Spring Webflow 2、および Hibernate Envers を使用します。Envers は hibernate.cfg.xml で構成されます。エンティティ 'ArticleGroup' と 'Article' の間に 1 対多の関係マッピングがあります。テーブル 'articles' には、テーブル 'article_groups' の ID への外部キー 'article_group_id' 参照があります。フロントエンドで記事を削除すると、Hibernate Envers が削除後イベントの制約違反例外をスローします。Envers を使用しない場合、削除操作は正常に機能します。2 つのエンティティは次のように定義されます。
記事の削除は次のようにコード化されます。
制約違反の例外:
ご覧のとおり、Envers がテーブル 'audit.articles_AUD' に挿入すると、article_group_id が null になり、制約違反が発生しました。誰もそれを修正する方法を知っていますか? どうもありがとうございました。
java - envers: 監査されていないエンティティを参照する監査されたエンティティを取得します
監査されていないエンティティを参照している監査されたエンティティを取得しようとすると、問題が発生します。私たちのアプリケーションでは、特定のエンティティが休止状態を使用せずにブートストラップされます。これらのエンティティはメタモデルであり、監査する必要はありません。
作業例:
コードを実行すると:
すべてうまくいきますが、B のバージョンを取得しようとするとエラーが発生します。
org.hibernate.ObjectNotFoundException: 指定された識別子を持つ行が存在しません [metafoo]
Envers は、私の metafoo エンティティへの遅延参照を使用して、B エンティティのルックアップを正常に実行します。ただし、それをキャッシュに格納しようとすると、B エンティティの hashcode メソッドが呼び出され、監査テーブルに存在しない metafoo が検索され、例外が発生します。
このエラーをスローする代わりに、存在しない参照を無視する方法はありますか? (おそらくクエリでそのような参照を除外することによって)
存在しないデータを完全に処理する方法 (監査テーブルから 1 か月以上前のすべてのエントリを削除したとします) では、存在しないデータを参照するエンティティを引き続きクエリするにはどうすればよいでしょうか?
PS:
可能であればハッシュコード関数を変更したく
ない メタモデルを監査したくない
テーブル構造:
表 A:
テーブル A_AUD:
表 B:
テーブル B_AUD:
スタックトレース:
編集:
この投稿は興味深いと思いましたが、参照がタイプ A であるため問題は解決しないため、注釈 @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED) は機能しません。
hibernate - Hibernate Envers : 監査テーブルからエントリを削除するには?
この質問はすでにここで議論されていましたが、私の問題は解決しませんでした。
名前などの文字列情報と、文字列の電子メールアドレスのリストを持つ単純な監査済みクラス Person を作成してみましょう。今、特定の人物をそのすべてのリビジョンとともにデータベースから削除したいと考えています。これは Envers の一般的な使用例ではありませんが、私のプロジェクトにとっては非常に重要です。次のようなものを使用できることを理解しています:
「full.package.name.Person_AUD u から削除 u.originalId.id = :personid」
ただし、この関係には制約がないため、メールのテーブルでこの人物に関連するレコードは削除されません。それとも私は何か間違ったことをしていますか?
REVINFO テーブルからレコードを削除することも考えていました (REVINFO テーブルとの関係について監査テーブルには制約があります) が、これは安全ではありません。 .
私の質問は次のとおりです。任意の人のすべての監査テーブルからすべてのレコードを簡単に削除する方法はありますか?
hibernate-envers - 削除したエンティティを保持したいだけの場合、Hibernate Envers を使用できますか?
現在、エンティティは削除しませんが、テーブルでフラグを「非アクティブ」に設定します (通常の操作ではこれらのエンティティを除外します)。誰かが私に Hibernate Envers を教えてくれましたが、私には少しやり過ぎのように見えます。私の質問は次のとおりです。
- Envers を使用してメカニズム (アクティブ/非アクティブ フラグ) を実行できますか?
- そうでない場合、Envers は削除されたエンティティのコピーをアーカイブ テーブルに保存できますが、バージョン管理や監査は行いませんか?
- このタスクの軽量な代替手段はありますか?
java - JPA: 最終更新時刻を別のテーブルに保存する
私はjpaと休止状態で作業しており、JPAが管理する各アイテムの作成/更新/削除時間を保存しようとしています。
Hibernate Envers のようなものが必要ですが、すべてのリビジョンではなく前回だけを保存し、そのデータを別のテーブルに保存したいと考えています (このデータはアイテム自体の一部ではなく、必要なオプションの同期プロセスに属しているため)各アイテムの最終変更時刻を知るため)。
現在、jpa @EntityListeners を使用してすべてのイベントをキャプチャできますが、これらの情報をデータベース テーブルに永続化する方法がわかりません。item_history テーブル エンティティを定義したくはありませんが、envers のように実行時に生成してアクセスします。
それは可能ですか?
hibernate - Hibernate Envers: 特定のリビジョンと特定のエンティティ クラスの Revision_type 情報を取得する方法
Hibernate envers 3.6.3.Final を使用しています。テーブルを監査でき、テーブルに、およびエンティティ データ_audit
が入力されていることがわかります。すべてのリビジョン エントリを表示する履歴ページを作成しているため、ユーザーがリビジョン ID をクリックすると、エンティティ データをリビジョン タイプと共に表示できます。つまり、追加、削除、または変更されます。を使用しようとしていますが、特定のリビジョンおよび特定のエンティティ クラスの情報を取得する方法がわかりません。で可能ですか?revision_number
revision_type
AuditQuery
revision_type
AuditQuery
Hibernate クエリを記述することで、「RevisionType」情報を取得できます。しかし、これには既存のフレームワーク API を再利用したいと考えています。別の方法では、基準として異なる 'RevisionType' を渡しAuditQuery
(つまり、DELETE、INSERT、および UPDATE の複数のクエリ)、結果が得られるかどうかを確認しましたが、これは効率的な方法ではありません。
maven - Maven Hibernate と Envers - 依存関係
Envers の使用中に依存関係の問題が発生しました。
Envers の世界のどこかに、クラスへの依存関係がありorg.hibernate.integrator.spi.Integrator
ます。これはで見つけることができますhibernate-core.4.1.7.Final
ただし、使用するhibernate-core.4.1.7.Final
と、依存関係の問題 ( NoClassDefFoundError
) が発生org.hibernate.event.PreCollectionUpdateEventListener
しhibernate-core.3.6.10.Final
ます。
Mavenは両方のバージョンをクラスパスに配置しないため、私はちょっと詰め込みました。
これに対する解決策/アイデア/修正を持っている賢い人。
ありがとうアダム
更新: 応答 @adamw に感謝しますが、それは機能しません。私が行ったことをもう少し詳しく説明しましょう。
build.xml:
次に、エンティティ コードに次のように記述します。
統合テストを実行すると、_AUD テーブルが作成されません。
したがって、これをファイルに追加します(ここでpersistance.xml
指示されているように):
そして、次のような Spring エラーが発生します。
どうすればこれを修正できますか?Spring、Envers、および Maven を使用しているときに、この問題を抱えている人は他にいますか?
あ、ちなみに。スニペットで指定されたリスナーproperties.xml
は、jar ファイルの依存関係のいずれにも存在しません。