問題タブ [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.
java - Hibernate EnVers の @NotAudited と RelationTargetAuditMode.NOT_AUDITED の違いは何ですか?
なぜ両方を使用するのですか?両方を使用するのが良いですか、それとも 1 つだけで十分ですか?
java - Envers に相当する PHP
PHP用のJBoss Enversに相当するものがあるかどうか知りたいです。
java - Enversはスキーマの変更にどのように対処しますか?
自己実装のバージョン管理ソリューションからHibernateEnversに切り替えることを考えていますが、まだよくわかりません。私はそれについてたくさん読みましたが、スキーマの変更と、古いスキーマに従ってデータを履歴化した後のEnversがそれらをどのように処理するかについて心配しています。
この点で、エンバーズでのあなたの経験は何ですか?Enversでスキーマの変更と既存のデータをどのように処理しますか?
アップデート1:
これは、テーブルから単純な列を削除することを追加するだけでなく、たとえば、単純なForein-Key-Relationshipを2つの1:n-relationshipsを持つ別のエンティティに変更する場合(属性付きの列を持つM2M。これは、データモデル。古いモデルに従ってすでに履歴データが存在する場合に、Enversを使用するときに、どのように対処しますか?手動でSQLスクリプトを記述し、それらを新しい表現に転送する方法はありますか?
spring - before_completion 同期操作から例外がキャッチされました: org.hibernate.SessionException: セッションが閉じられました!
Spring と Hibernate Envers を使用して、レコードを監査テーブルに挿入しています。Wicket アプリケーション (Web) がサービスを呼び出すと、Spring が OpenSessionViewFiler を使用し、flushmode を Manual に設定することがわかります。AuditProcess クラスの doBeforeTransactionCompletion メソッドの次のコード:
IsManual が true になると、一時セッションを使用してレコードを監査テーブルに挿入します。正常に動作しています。
WebSphere には別のアプリケーション EJB、Spring、Hibernate があります。EJB から同じサービスを呼び出すと、flushmode が AUTO になり、上記のメソッドの AuditProcess クラスで次のエラーで失敗します。
この問題を解決するためのアイデアを教えてください:
助けてくれてありがとう、ベンカット
hibernate - シロ、ハイバネイト、エンバーズ
shiroを実装しましたが、非常にうまく機能しています。現在、Hibernateでエンティティの監査ログを実行するためのenversを実装しようとしていますが、これも機能します。1つの問題は、通常モードとrunAsモードの両方で対象にshiroからの変更を行わせようとしていることです。
Shiroは現在のスレッドから件名を取得し、enversのAuditEventListenerが呼び出されるまでに、すでに別のスレッドにあるようです。shiroのサブジェクトを現在のスレッドにバインドするためのHibernateの適切なフックはどこにありますか。Shiroにはすでにこれを行うメソッドがありますが、hibernatesイベントの呼び出し元をオーバーライドして、サブジェクトを新しいスレッドにバインドするか、後で取得できるようにイベントにデータを追加する必要があります。
java - Hibernate envers を使用して最近削除されたエンティティを見つける
したがって、私の問題は、特定のクラスの最近削除されたエンティティ、つまり特定のタイムスタンプ以降に削除されたエンティティをすべて見つける必要があることです。具体的には、過去 1 時間以内に削除されたエンティティを検索したいと考えています。
私のすべてのエンティティには、リスナーで正しく維持する作成および更新されたタイムスタンプがあります。
Envers も使用し、エンティティに注釈を付けます。
推測すると、クエリは次のように開始する必要があります。
しかし、DateTime以降に削除された予約を見つけるためにここに何を置くべきかわかりません。
jpa - 特定のオブジェクトが影響を受ける完全な Envers リビジョンを取得する
リビジョン データが保存される方法は、リビジョンの影響を受ける各オブジェクトが_AUD
テーブル内の個別のレコードを取得します。したがって、 object に影響を与えるリビジョンを検索するとA
、リビジョンが3
objectのエントリが返されますB
が、オブジェクトA
および/またはC
リビジョン で変更された場合3
、それらのエントリは返されず、B
変更された唯一のオブジェクトであるという印象を与えますそのリビジョン。私がやろうとしているのは、オブジェクトに影響を与える各リビジョンに対してB
、そのリビジョンの影響を受けるすべてのオブジェクトを返すことです。
関連するリビジョンを見つけるために最初のクエリを実行することで、これを実行しようとしています。
次に、結果ごとに次のクエリを実行します。
しかし、これは次の結果になりますQuerySyntaxException
:
エイリアス 'r' の重複定義 [models.AgentShift_AUD e、models.RevisionData r、models.RevisionData r から e、r、r を選択します。ここで、(:_p0) の e.originalId.REV.id と e.originalId.REV.id = r.id および e.originalId.REV.id in (:_p1) および e.originalId.REV.id = r.id e.originalId.REV.id asc、e.originalId.REV.id asc による順序]
これのいくつかのバリエーションを試しましたが、すべて同じ「エイリアス 'r'の重複定義」につながりました。他に試せることはありますか?
java - HibernateEnversを使用しているときに監査直後にrevidを取得する方法
監査にHibernateEnversを使用しています。正常に動作します。ただし、データを変更した直後にリビジョンIDを取得しようとしています。私は以下のようなCustomRevisionEntityを持っています:
およびCustomRevisionListener:
では、たとえば以下のようにアドレスを更新する場合、リビジョンIDを取得するにはどうすればよいですか?
ありがとう!
java - データを envers リビジョン リスナーに渡す
Enver の RevisionEntity を使用してリビジョン コメントを保存しようとしています。これにより、リビジョン ID とタイムスタンプと同じテーブルにあり、複数のエンティティが変更された場合でも 1 回だけ保存されます。
私の現在のアプローチは
- リクエストを処理するコントローラ アクションは、コメントをセッション変数に入れます
- 私のカスタム RevisionListener は、セッション変数を読み取り、コメントを RevisionEntity に追加し、セッション変数をクリアします
しかし、私はこのアプローチに満足していません。競合状態やその他のおかしな動作が発生しやすいようです。これをより強固にする方法はありますか?おそらく、コントローラーアクションで直接 RevisionEntity にアクセスすることでしょうか?