問題タブ [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 クラスローディングの問題
既に開発されたアプリケーションに Hibernate Envers を統合しようとしています。
Hibernate Envers JAR を EAR パッケージに同梱して出荷しましたが、クラス ローダーとある種の競合に関して醜い例外がスローされます。
Envers JAR を EAR 内に出荷せずに JBoss の「lib」ディレクトリに配置すると、すべて正常に動作しますが、このグローバルな「lib」にアクセスできないため、アプリケーションとともにライブラリを出荷する必要があります。 " ディレクトリ。
Hibernate 3.3.GA と Envers 1.2.2.GA を使用して、JBoss 5.1.0.GA にデプロイしています。
どんな手掛かり?
例外はこれです:
java - Envers監査テーブルにプロパティがありません
私はenversを使用してParameterToValueエンティティを監査しています。マップされたDBテーブル"values_for_params"(通常のHibernateテーブル)の列として表示されるプロパティ "containerId"、 "containerType"、 "parameterId"は、enversで生成された"values_for_params_AUD"DBテーブルにありません。指定された(containerId、containerType、parameterId)の履歴「値」を取得する機能が必要です。
ParameterToValueクラス:
Hibernateマッピング定義:
values_for_params
MySQLでCREATETABLEを表示します。
values_for_params_AUD
MySQLでCREATETABLEを表示します。
hibernate - HibernateEnversと「Javassist拡張に失敗しました」例外
Hibernate Enversを使用しており、次の状況があります。
:を参照するクラスBusinessObjectType
とクラスIdentity
BusinessObjectType
次に、Identityのすべてのバージョンを次のようにクエリします。
BusinessObjectType
保存されたIDに(つまり、 nullであった)がない場合、businessObjectType
すべてが魅力のように機能します。
IDbusinessObjectType != null
に「JavassistEnhancementfailed」の例外がある場合:
このエラーは、EnversがBusinessObjectTypeをインスタンス化しようとしていることに関連しているようですが、問題が何であるかはわかりません(AuditQueryを使用しない場合、Hibernateは両方のオブジェクトに問題はありません)。
例外の原因は
スタックトレースなし。
問題が何であるかについてのヒントはありますか?
jboss - jboss 7 (envers 4) クラス org.hibernate.envers.event.AuditEventListener をロードできません
休止状態の Envers 3.6 から Envers 4.0 に移植します。この新しいバージョンにはAuditEventListenerがありません。古いバージョンの要件:リスナー
新しいバージョンの設定方法がわかりません。
java - Envers カスタム リビジョン リスナー
Tomcat 環境で Hibernate Envers を使用しています。それは正常に動作します。ただし、監査対象のデータを変更したユーザーのユーザー名を追加できる必要があります。これは、独自のバージョンの RevisionEntity を実装することで実行できます。RevisionListener
次に、監査する追加情報を入力するカスタムも実装する必要があります。監査対象のデータを変更したユーザー名を監査する必要があります。ドキュメントでは、Seam でこれを行う方法の例です。彼らがRevisionListener
呼び出すで:
ユーザー名を取得します。私のプロジェクトでは、プロジェクトをデータベースと Web 用の個別のモジュールに分割しました。現在ログインしているユーザー名を取得できるようにするには、データベース モジュールにカスタム リビジョン リスナーを実装する必要があります。を Web パッケージに移動しRevisionListener
て、データベース モジュールから Web モジュールへの依存関係を導入することはできません。カスタム RevisionListener で同時にログインしている複数のユーザーを処理する方法で現在のユーザー名を取得するにはどうすればよいですか?
最善の解決策は、ほとんどのコンテナーで機能するものです。
java - 変数を検査するときにEclipseは何をしますか(デバッグ中)
プログラムでアクセスしようとするたびにヌルポインタ例外が発生しますorg.hibernate.envers.entities.mapper.relation.lazy.proxy.ListProxy
(つまり、 を呼び出しますlist.size()
) が、Eclipse の変数インスペクタを使用してオブジェクトを最初に検査すると、Hibernate が SQL ステートメントを生成し、リストが変更されます。動的に。その後、すべてが機能します。プログラムで同じことを行うにはどうすればよいですか? 試してみましlist.toString()
たが、役に立たないようです。
更新 1
これが役立つかどうかはわかりませんが、最初にリスト インスタンスをクリックすると、ディスプレイに次のように表示されます。
その後、データベースクエリが実行され、もう一度クリックすると正しい.toString()
結果が得られます。
更新 2
これが私が得る元の例外です(デバッグモードで要素を検査しない場合)。
最終的な解決策 (実際には一時的なハックに近い)
java - Envers クエリは熱心な結果ではなく遅延結果を返します
フィールドが lazy="false" を使用して hibernate-mapping で定義されているにもかかわらず、遅延結果を返す Envers クエリがあります。
Hibernate-Envers フォーラムで調べましたが、有用な情報は見つかりませんでした。
だからこれは私が持っているものです:
休止状態のマッピング -
これは実行時の結果です
私が間違っていること、または遅延オブジェクトの代わりに実際のオブジェクトを取得するにはどうすればよいかについてのアイデアはありますか?
前もって感謝します。
java - Hibernate Interceptor を使用した Envers、onDelete
Hibernate エンティティを監査するために、単純な Envers + インターセプター ベースのアプローチを実装しようとしています。このために、典型的なアプローチに従って、BaseEntity
すべての監査プロパティを備えた があります。
では、それがエンティティの保存か更新かに応じて、上記のプロパティを操作するメソッドをAuditInterceptor
オーバーライドonFlushDirty
しました。onSave
保存と更新では、すべてが期待どおりに機能します。
私が直面している問題は次のとおりです。削除操作でも上記のプロパティを操作できるようにする方法が必要です。オーバーライドすると配列onDelete
へのハンドルが得られますがstate[]
、それを変更しても _AUD (監査) テーブルには反映されません。一言で言えば、監査テーブルの削除操作も監査できるようにしたいと考えています。
これに対する回避策はありますか、それとも何か不足していますか?
java - コレクション内のルート エンティティとそのエンティティのリビジョン番号を取得する
現在、統合用のアプリケーションで envers ライブラリを試しています。getRevisions を実行するたびに、ルート エンティティのリビジョンのみを取得します。
ただし、Envers は同封されたコレクション内のエンティティのリビジョンも取得できると期待しています。いくつかのカスタム クエリを試しましたが、結合などを介して 2 つを組み合わせることができません。
エンティティは次のとおりです。
エンティティ: フォーム
エンティティ: FormElement
サービス: FormVersioningService
最初のログは次を返します。
情報: [16、19、20、24]
2 番目の戻り値:
情報: [24、25]
しかし、私は次の結果を得たいです:
情報: [16、19、20、24、25]
Hibernate 3.5.6 を使用していますが、現時点では新しいバージョンにアップグレードできないため、このバージョン内で解決策を探しています。
どんな助けでも大歓迎です。
java - HibernateEnversのfindメソッド中のnullpointerexception
私は長い間エンバーを使用していません、そして私はどこにも答えを見つけることができないように見える問題にぶつかりました。スタックトレースをグーグルで検索しようとしましたが、役に立たなかったので、やみくもに明らかな何かが欠けているに違いありません。データベース内の以前のバージョンのDocumentクラスを取得するために、org.hibernate.envers.AuditReaderで'find(class、versionNumber)'メソッドを実行しようとすると、次のスタックトレースが取得されるようです。
このエラーの原因となるコードは次のとおりです。これは私のドキュメントが保存された後に行われ、適切なバージョンがデータベース(document_AUD)に作成されているようです。
私の「Document」クラスには、次のように注釈が付けられています...
この問題を適切に見つけるには、さらにコードが必要であることをお知らせください。
読んでくれてありがとう、そしてどんな提案も歓迎します、
リッチ。