問題タブ [nhibernate-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.
c# - DIを介してEnversRevisionListenerを構成する
アプリケーションに監査証跡を追加するために、NHibernate.Enversを使用することにしました。アプリ固有のリビジョンの追跡を可能にするために、DefaultRevisionEntity
はユーザー固有のデータで拡張されました。
Enversは、クラスが装飾されている属性にRevisionListener
応じて、どちらを使用するかを決定します。RevisionEntity
ServiceLocatorパターンを使用して、アクセサーをに注入していRevisionListener
ます。現在、これは私がServiceLocatorを使用しなければならず、本当にそれを取り除きたい唯一の場所です。
UserAccessorをRevisionEntityに挿入する別の柔軟な方法はありますか?
nhibernate - シャープ アーキテクチャ + NHibernate Envers
現在、シャープ アーキテクチャ 1.9.6 を使用しています。そして、ドメイン クラスを監査する必要があります。このタスクには NHibernate Envers を使用するのが快適なようです。しかし、このライブラリを使用するようにシャープ アーキテクチャを構成できませんでした。いくつかのエラーがありましたが、1 つを除いてほとんどすべて解決しました。
エラーは次のとおりです。
たとえば、DB に "Document" という名前の POCO クラスと "Documents" テーブルがあります。また、テーブル「Documents_AUD」を作成し、属性 [Audited] をクラス「Document」に追加しました。そのため、Document クラスのオブジェクトが変更された場合、Envers は「Documents_AUD」テーブルにデータを追加する必要があります。これを行うには、Envers は別のクラス「Document_AUD」のオブジェクトを (動的に?) 作成します。そしてここにエラーが表示されます:「NHibernate.MappingException No Persister for Document_AUD」。
また、Document_AUD のマッピングをどこに追加すればよいかわかりません。
Envers を Sharp Arch で使用している人はいますか? 誰かが Envers + Sharp Arch の構成を共有できますか?
どうもありがとうございました!
asp.net-mvc - NHibernate Envers で現在のユーザーをログに記録する方法
現在のユーザーのユーザー名を Envers のリビジョン エンティティ テーブルに記録する方法を調べました。しかし、情報はほとんどなく、私が見つけた情報はそれほど役に立ちませんでした.
次のようなリビジョン エンティティとリスナーがあります。
これら 2 つを ASP.NET 環境内で使用したいと考えています。コストのかかるアクションであるため、構成およびセッション ファクトリは一度作成されます。トランザクションごとに、新しいセッションが開かれます。
このNHE Jiraの問題とこれに関連するSOの質問から、nHibernateを構成するときにユーザー名をリスナーに登録できることがわかりました。
ただし、トランザクションごとに最初にアプリケーションに接続する人のユーザー名を登録するので、それは私にとっては十分ではありません。
特定のトランザクションに関連するユーザー名をリスナーに提供できるようにする必要があります。
以前は、nHibernate の更新前および更新後のイベント リスナを使用した貧弱な監査を使用していました。ここで、これらのリスナーもセッションではなくセッションファクトリに関連付けられているため、同様の問題に直面しました。したがって、内部のセッションに関連付けることができる古いスタイルのインターセプターに切り替えましたOpenSession
。これにより、現在のユーザーをインターセプターに追加できました。
ただし、Envers の同じ問題を解決する方法がわかりません。誰かが助けてくれることを願っています。
nhibernate - 監査を保存しないEnvers-Nhibernate
私は次のenvers構成を持っています:
監査テーブルは作成されず、データは保存されません。自分でテーブルを作成してみましたaudit.User_Audit
が、何も変わりません。nhibernateenvers1.30とnhibernate3.3.1があります。
これを機能させるために別の構成が必要ですか?
c# - 一意の順序付け列エントリをNHibernateおよびEnversと交換する方法は?
私はしばらくNHibernateを使用していますが、最終的に問題が発生しました。答えを見つけることも、他の誰もこの問題を抱えているように見えたことはありません。環境は、履歴保持のためにNHibernate3.3.1.4000およびNHibernate.Envers1.4です。
次の種類のデータベーステーブル/エンティティクラスがあります。
マッピングあり:
プロシージャステップのリストを持つ親オブジェクトがあります。これで、ユーザーはさまざまなステップを追加、削除、または変更できます。1つの「変更」は、ボタンを使用してステップのリストで選択した項目を上下に移動する手順ステップの順序の変更です。
具体的な例を見てみましょう。
シナリオは、4つの手順ステップ1〜4のリストです。
ユーザーは2番目の項目「Bbbb」を選択し、「上へ」ボタンを押して、以下を取得します。
コードで私は今、次のようなことをすることを考えました
しかし今、NHibernatesが活躍します。NHibernateは、トランザクションをコミットするときにステップ1について何も知らないため、データベースへの2つの更新コマンド(ステップ2および3)のみを処理しようとしていますが、StepNo列の固有の特性のために機能していません。手順1の後にsession.flush()を追加しても、その動作には何も変更されません(トランザクション内にあるため、私には非常に理解できます)。
次のアイデアはsession.CreateQuery("update...").ExecuteUpdate()
、データベースの変更を行うために使用することでした。これは正常に機能していますが、Enversを回避しており、この変更の履歴レコードがないままになっています(SQLが渡されるだけなので、もう一度理解できます)。
しかし、すべてを1つのトランザクションにまとめ、Enversの履歴を持たせることで、この変更を行う正しい方法は何でしょうか。「StepNo」列を一意にしないことが、それを機能させる唯一の方法である可能性がありますか?適切な順序付けを行い、データベースにこれを保証させることが重要であるため、列の固有の特性を失うことは望ましくありません。これは大きな助けになります。
あなたのアイデアを前もってありがとう!
[解決]:
jblとcremorだけが答えを持っているようです。他のいくつかの問題点と合わせて、Enversを完全にスキップし、履歴管理を行うためのより専門的な方法を使用することにしました。Enversがない場合、SQLコマンドを使用した単純な3ステップの更新で問題を解決できます。
c# - NHibernate Envers-別のデータベースでリビジョンを監査する方法は?
私はNhibernateEnversを使用していますが、Enversに監査情報を別のデータベースに保存して、物事をよりクリーンで保守しやすくしたいと考えています。
私はこの流暢な構成を使用しています:
しかし、スキーマを作成しようとすると、HibernateExceptionが発生します(指定されたスキーマ名 "nhibernate_testAU"が存在しないか、使用する権限がありません)。
価値があるので、私のバックエンドはSQLServer2005です
nhibernate - nhibernateバリデーターとenverstogether
同じプロジェクトでnhibernateバリデーターとnhibernateenversの両方を一緒に使用しようとしています....しかし、私はnullの期待を取得しています:
後でバリデーターを初期化すると、エラーが発生します。
しかし、逆の場合、エラーが発生します。
誰かがこれを以前に試したことがありますか?これを修正する方法は??
ありがとう、ハリッシュ
nhibernate - nhibernateenversと楽観的並行性
私は監査にnhibernateenversを使用しています。データベース内のテーブルごとに対応する監査テーブルを作成します。
Enversには、必須の2つのフィールドが必要です。1つはバージョン、もう1つはタイムスタンプです。
ただし、楽観的同時実行性のために、メインテーブルにもバージョンフィールドが必要です。
たとえば、TableA {id、version、name}の場合、監査テーブルは次のようになります:{id、version、name、revision、revisionType}
監査テーブルのフィールド:バージョンとリビジョンはまったく同じであり、どちらにもエントリのバージョンが含まれています。
メインテーブルからバージョンフィールドを削除すると、楽観的同時実行性はnhibernateで機能せず、enversの場合はリビジョンフィールドを指定する必要があります。
この状況にどのように対処できますか?
nhibernate - NHibernate Envers fluentconfiguration を使用したユーザーの監査
NHibernate Envers を使用して追加フィールド「ユーザー」を記録しようとしています。いくつかのコード例をたどってみましたが、構文に関しては少し異なっているように見えます。おそらくそれらのいくつかは少し古くなっているためです。しかし、私はそれを機能させることができません。
この例外が発生しています:
属性 [RevisionNumber] を持つことができるプロパティは 1 つだけです!
私のカスタム リビジョン エンティティ:
私の IRevisionListener:
まず、コードによるマッピングを使用してエンティティをマッピングします。
次に、Envers と NHibernate を構成します
最後の行には例外
があります。属性 [RevisionNumber] を持つことができるプロパティは 1 つだけです!
誰にもアイデアはありますか?私自身、デフォルトのリビジョン エンティティがまだ何らかの形で使用されていると推測し、カスタム リビジョン エンティティを登録しようとすると、これが発生します。