問題タブ [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.

0 投票する
1 に答える
616 参照

hibernate - エンティティごとの監査可能なフィールドのストレージ

特定のエンティティ (createdBy、creationDate、modifiedBy、modifiedDate など) に何が起こったのかを追跡するために、監査可能なフィールドをキャプチャすることは良い習慣だと思います。

  1. オブジェクトが変更されていない場合、SNMPv3 イベント (createdBy、creationDate など) の次の監査可能なフィールドをキャプチャするだけで意味があると思います。

  2. オブジェクトが作成後に複数の人によって変更可能である場合、たとえば、ユーザー プロファイルが自分自身または管理者によって変更できる場合、上記のすべての属性 (createdBy、creationDate、modifiedBy、modifiedDate など) をキャプチャすることが理にかなっていると想定しています。

  3. エンティティごとの監査証跡の履歴が必要ないと仮定すると、すべての監査可能な属性をエンティティ自体に保存することは理にかなっていますか?

  4. 上記のユースケースでは、監査をサードパーティのフレームワーク (JBoss Envers - http://www.jboss.org/enversなど) に委譲することは理にかなっていますか?

  5. エンティティ (たとえば、発注書) がユーザー X によって作成および維持され、ユーザー Y が上記の PO にいくつかの改良を加えると仮定します。このエンティティの所有者としてマークする必要があるのは誰ですか (作成者または変更者)。この場合の creationDate はまったく関係がない可能性があるため、ここでこのフィールドを追跡することは理にかなっています。

注: 基礎となる永続レイヤーは、JPA、Hibernate 3.3.x に基づいています。

0 投票する
4 に答える
9248 参照

hibernate - 監査テーブルからエントリを削除するには?

現在、Hibernate Envers を使用しています。

削除したいエンティティに関連する監査テーブルのエントリを削除するにはどうすればよいですか? 私のエンティティは他のエンティティと関係がありません。

onPostDeleteカスタムリスナーのメソッドでそれを行う必要があることがわかりました:

ドキュメント、フォーラム、多くのことを読みましたが、理解できません。多分それは不可能です、私にはわかりません。

誰かがこれをやったことがありますか?

0 投票する
1 に答える
1296 参照

java - Hibernate - Envers - 複数の監査ターゲット

私はすでに Hibernate Envers を使用して、ユーザーが UI を介して更新したエンティティを監査しています。ただし、バックグラウンドで実行されている非同期ジョブもあり、Envers を使用してそれらも監査したいと考えています。ここで、UI について、どの HttpRequest が変更を加えたかを追跡して、日付、ユーザー、セッションなどを取得します。バックグラウンド ジョブについては、ジョブが実行された日付と、それを変更した正確なジョブを追跡したいと思います。 (ジョブクラス)。

2 つの監査エンティティ (UI 用に 1 つ、システム変更用に 1 つ) をセットアップすることは可能ですか?

ウォルター

0 投票する
1 に答える
3695 参照

java - Hibernate Envers - リレーションのトラバース

私のアプリケーションには、次のようないくつかの監査済みエンティティ クラスがあります。
さまざまな休止状態の注釈を持つ他のエンティティへの複数の HAS-IS 関係が含まれています。

監査テーブル エンティティからすべての属性値を返す次のコード スニペットを使用して、監査証跡を分析しています。

正常に動作しますが、これはクラス内のリレーションをトラバースすることを考慮していません。
オブジェクト属性のタイプを検出してから再帰呼び出しを行う再帰アルゴリズムを何らかの方法で開発できますか?
これを完全に行うためのより良い方法はありますか?

0 投票する
1 に答える
1293 参照

hibernate - @ManyToMany: REVTYPE は ADD のみです

つまり、Person と Attribut の 2 つのクラスがあります。

これらのクラスでは、db テーブルの person、attributes、attribute_alloc、persons_aud、attributes_aud、および attribute_alloc_aud が正しく生成されました。

個人の属性の監査を除いて、すべてがうまく機能します。テーブル attribute_alloc_aud では、変更 (たとえば、属性を削除して個人に新しい属性を追加するなど) は正しく追跡されますが、常に REVTYPE ADD でマークされます。例えば:

  • REV; person_id; attribute_id; REVTYPE
  • 1; 1; 1; 0
  • 1; 1; 2; 0
  • 2; 1; 1; 0
  • 2; 1; 5; 0
  • 3; 1; 8; 0

その結果、前回のリビジョンで被監査者は属性 1、2、5、および 8 を持っています。正しいのは 8 だけです!

どうしたの?どうもありがとう!よろしくお願いします

レヴィ

0 投票する
1 に答える
3262 参照

java - Spring 3.x と Hibernate Envers

私たちの環境で Hibernate Envers を動作させるのに問題があります。LoadTimeWeaving で Spring 3.x を使用しています。以下は、コンテキスト ファイルです。

ここに私たちのpersistence.xmlがあります

監査テーブルは正しく設定されていますが、エンティティが永続化されている場合、監査テーブルにレコードが保存されていません。監査されるフィールドは 2 つだけです。また、loadTimeWeaving を使用しているため、単体テストを実行するときに、-javaagent:/Users/TEST/.m2/repository/org/springframework/spring-instrument/3.0.3.RELEASE/spring-instrument- が必要です。 3.0.3.RELEASE.jar を JVM 引数として使用すると、loadTimeWeaving が機能します。

Envers を除いて、他のすべては正常に動作します。

どんな助けでも大歓迎です。

0 投票する
1 に答える
1722 参照

hibernate - Hibernate.Envers: @ManyToOne で @Audited が例外をスローする

manytoone アノテーションによって関連付けられた次の 2 つのクラスがあります。

@Audited(...) を削除して Mitarbeiter を保存すると、すべて正常に動作します。ただし、 @Audited-Annotation を使用すると、次の例外がスローされます。

java.lang.NoSuchMethodError: org.hibernate.persister.entity.EntityPersister.getIdentifier(Ljava/lang/Object;Lorg/hibernate/engine/SessionImplementor;)Ljava/io/Serializable; org.hibernate.envers.tools.Tools.getIdentifier(Tools.java:67) org.hibernate.envers.tools.Tools.entitiesEqual(Tools.java:50) org.hibernate.envers.entities.mapper.relation.ToOneIdMapper. mapToMapFromEntity(ToOneIdMapper.java:71) org.hibernate.envers.entities.mapper.MultiPropertyMapper.map(MultiPropertyMapper.java:86) org.hibernate.envers.synchronization.work.ModWorkUnit.(ModWorkUnit.java:48) org.hibernate .envers.event.AuditEventListener.onPostUpdate(AuditEventListener.java:165) org.hibernate.action.EntityUpdateAction.postUpdate(EntityUpdateAction.java:200) org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:179) org.

何が問題なの?」

本当にありがとう!リーバイス

0 投票する
3 に答える
2245 参照

hibernate - Grailsでオブジェクトのリビジョンを管理する方法は?

grailsWebアプリで記事の改訂システムを実装する必要があります。grailsフォーラム、stackoverflow、grailsプラグイン、グーグルインターネットを検索した後、3つのオプションがありました。

オプション1 - grailsEnversプラグインを使用します(http://code.google.com/p/grails-envers-plugin/を参照)。誰かがそれをうまく使用しましたか?または、プラグインなしでEnversを使用します(ここを参照)が、GORMで動作させるにはどうすればよいですか?

オプション2-ここで見つけたGversプラグインの使用:https ://github.com/ziftytodd/gvers 。誰も使っているのを聞いたことがないので、使ったことのある人はいますか?

オプション3-組み込みメカニズムWeceemは、WeceemCMSのすべてのコンテンツのバージョン管理システムを作成しました。この素晴らしいアプリケーションのコードとデザインのロジックからインスピレーションを引き出すことはできますが、それはやり過ぎのようで、非標準のソリューションを使用するのはあまり好きではありません。

だから私の質問、あなたは私に何をするようにアドバイスしますか?これらのオプションのいずれかを使用したことがありますか?

洞察をありがとうございました。

0 投票する
1 に答える
1333 参照

java - JBossenversと巨大な監査テーブル

私はJBossEversを使用してJavaEEアプリケーションを監査していますが、アプリケーションの性質上、監査テーブルが非常に速く成長します。過去のデータが照会されることはめったになく、先週のデータを除けば、アクセス時間は実際には問題ではありません。このデータは頻繁に照会され、アクセスは高速である必要があります。理想的には、データを分割して2つのテーブルに分散し、古いデータを圧縮形式で配布します。

残念ながら、ドキュメントからわかる限り、Enversでは複数のテーブルにデータを分散することはできません。

誰かがこれを達成するための最良の方法は何か考えていますか(可能であれば、Enversを使用している間に)?

0 投票する
1 に答える
4422 参照

hibernate - 監査証跡用の Hibernate インターセプターまたはイベント?

いくつかのエンティティに対するすべての変更の履歴を記録し、これを自動的に処理するEnversと同様のメカニズムを実装しようとしています。私の質問は、Hibernateインターセプターまたはそのイベント システムを使用するかどうかです。

インターセプターはもう少しシンプルで、必要なすべてを実行しているようです。また、Hibernate 自身のドキュメントでは、「監査情報の追跡」にインターセプターを使用することが提案されています。しかし、彼らの監査情報は各エンティティのコンパニオン テーブルにはなく、Envers は私が想像する理由でイベント システムを使用しています。

Spring 3.0 と Hibernate 3.5 (最新の安定版) を使用しています。

UPDATE : データベース トリガーは、この状況では望ましくありません。ハイバネートインターセプターと監査証跡/変更履歴のイベントについての考えを聞きたいと思っています。