私が必要とするのは、DB ビュー (挿入不可) からエンティティを作成し、すべてのエンティティを更新可能な DB テーブルに更新することです。
- エンティティをテーブルにマッピングし、ビューからカスタム ロード SQL を記述することはオプションではありません。これは、NHibernate がまだテーブル名から選択しようとする場合があるためです (たとえば、このエンティティに参加する場合)。
- エンティティをビューにマッピングしてカスタム データ変更クエリを作成することはオプションではありません。クロスデータベースの sql-insert ステートメントを作成できないためです (最後に挿入された ID 値の選択部分のため)。
今のところ思いついた唯一のアイデアは、生成された SQL ステートメントをオンザフライで変更することです。カスタムインターセプターでなんとかできましたが、それは良い考えではないと思います(他のエンティティであっても、すべてのクエリをインターセプトするため)。ただし、 custom を使用して必要なクエリのみを変更できるようにすることは可能であると思いますIEntityPersister
。に基づいて作成しSingleTableEntityPersister
、 で指定しました<class persister="…">
が、NHibernate はそれをインスタンス化することさえ望んでいません。
NHibernate 用のカスタム エンティティ パーシスタを作成する例はありますか?