問題タブ [table-per-subclass]
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.
nhibernate - サブクラスごとの NHibernate テーブルが無意味な INSERT ステートメントになる - 何が間違っているのでしょうか?
次のエンティティがあります。
次の Hibernate Conformist マッピングを使用して、これらのエンティティをマッピングします。
はEnumCustomType
、IUserType
C# 列挙型を整数列にマップする です。
この設計とマッピングは、NHibernate のリファレンス ドキュメントとこのブログ (特定のページ) (概要) を参照して多くの調査と協議を行った後に策定しました。これは私が望んでいるエンティティの設計であると確信していますが、もちろん可能です (可能性は高いですか?) マッピングを間違えました。
NHibernate を起動して構成すると、マッピングが読み込まれ、文句は言われません。ログ出力には、マッピングに関する警告はありません。ただし、 を作成しPersonUser
、そのすべてのプロパティに値を割り当て、Add
それをに割り当てるとISession
、最も奇妙なことが起こります。
重要なのは、生成された SQL を見てください。
それは意味がありません。マッピングにはまったく対応していません。1 つのテーブルの挿入ステートメントで、3 つの異なるテーブルから列を取得しています。PersonUser
AND からの列がClientUser
あり (これはあり得ないことです)、存在しないパラメーター インデックスを使用してパラメーターをバインドしており、設定したすべてのプロパティも含まれていません!
私はこれで数時間遊んでいますが、何の進歩もありません。私はここで完全に途方に暮れています。意味がありません。これを前に見た人はいますか?何が起こっているのか分かりますか?
EDIT私は言及するのを忘れました:User
IDでジェネリックを取得できるようにしたいので、ここでディスクPersonUser
リミネーターを使用しClientUser
ています。
jpa - @OneToMany 関係プロパティが入力されていません
Joined, Multiple Table Inheritanceを実装しました。
「親」テーブルpoisと 2 つのサブテーブルxPoisとyPoisがあり、PoiDao を拡張するXPoiDaoとYPoiDaoクラスだけでなく、抽象PoiDaoクラスもあります。
ポイには複数の予約がある場合がありますが、予約は 1 つのポイにのみ属します。
子テーブル DAO で定義された名前付きクエリは、それぞれの (直接) テーブル階層で定義された属性に対して適切に機能します。親テーブルには、reservationsという名前の別のテーブルとの外部キー関係があります(テーブル requests は、テーブルpoisの外部キーを保持します)。問題は、この予約テーブルのレコードが取得されないことです。
MySql Workbench でこの SQL ステートメントを実行すると、目的の結果セットが得られます。
Eclipse では、デバッグ モードで xDao インスタンスを調べると、{IndirectList: not instanceiated}が表示されます。
JPAを使用してPoiDaoに格納されているこのテーブルからレコードを取得するにはどうすればよいですか?
c# - サブクラスを更新する可能性を無効にする
流暢な nhibernate で継承戦略を開発しています。すべて正常に動作しますが、1 つ質問があります。サブクラスによる基本プロパティの更新を無効にする可能性はありますか?
ダミーコードは次のとおりです。
objectB を更新しているときに、StatusA を更新したくありません。ObjectA を更新するときにステータス A を変更したいと考えています。nhibernate にはこの種の機能がありますか? 意味はありますか?
編集: 追加 の説明 私がそのようなことをしたい理由は、私のシステム (asp mvc アプリケーション) には、objectsA と objectsB を管理する 2 つの異なる場所があるためです。最初にオブジェクト A を作成し、後でオブジェクト A をオブジェクト B に「変換」します。次に、これら 2 つのオブジェクトを 2 つの異なるモジュールで編集できます。
objectB を編集するための私のフロー: -db から objectB を読み取り、viewmodel に変換します。 -ビューからフォームを投稿し、ビュー データをフォームから objectB に変換し、db で更新します。
オブジェクトAからのデータのオブジェクトBのビューモデルを拡張し、このデータをいくつかの非表示フィールドに保存して、ビューモデルから変換したくありません。
このデータを Session.SaveorUpdate(objectB) で更新できないことをマークできれば、問題は解決すると思いました。つまり、基本的にそれが私の質問でした。
c# - NHibernate でサブクラスごとのテーブル オブジェクトを取得する
私は、膨大な数の列を持つ ScheduledJobs と呼ばれる DB テーブルと、膨大なプロパティを持つ単一の一致する C# オブジェクトに遭遇しました。私はそのデザインに満足しておらず、サブクラスごとのテーブル戦略を使用して分割したいと考えていました。それ以外の
私は持っている
NHibernate .hbm.xml ファイルを書き直して (Fluent ではなく、申し訳ありません)、以下を使用しました。
すごい!私の問題は、サブクラス化されたジョブを賢く取得する方法がわからないことです。1 つの大きなテーブルの利点は、型やキャストについて心配する必要がないことです。
私のセットアップでは、同じ ID を持っています (これで十分なはずです。まだ一意です)。ただし、型は不明です。抽象ジョブをフェッチし、JobTypeID を調べ、関連する C# サブクラスを見つけて、その下で再フェッチする必要があります。サブクラス。
必要に応じて、JobTypeID を取り込むことができます。その ID を、それに関連付けられているジョブ サブクラス テーブルとペアにする必要があります。
要するに、NHibernate から受け取った ScheduledJob オブジェクトを正しいサブクラスにする必要があり、私の介入は可能な限り少なくする必要があります。ここでディスクリミネータを使用できることは素晴らしいことですが、公式ドキュメントでは許可されていません。このデザインは、根本的に何かを誤解しているように感じさせます。私を正しい方向に向けてください。
ありがとう!
java - Joined 戦略で @Inheritance を使用した Hibernate エラー「オブジェクトが見つかりません」
Hibernate で正しく動作する 3 つの Java クラス (BaseEntity、User、Role) があります。User と Role はどちらも BaseEntity のサブクラスです。ユーザー用のテーブルとロール用のテーブルがあります。ユーザーをロールにマッピングするための結合テーブルがあります。使用されるすべての注釈はjavax.persistence
注釈です。
さまざまな理由から、モデルを拡張し、Role のスーパークラスを作成する必要があります。このスーパークラスには自己参照が必要です。私の考えは、ここで結合された戦略で @Inheritance アノテーションを使用することでしたが、Hibernate からエラーが発生し続けます。私が読んだことから、Hibernate は、スーパークラスから属性を取得するために結合を行う必要があることを理解する必要があります。
私が得ているエラー:
[警告] [18:30:04.004] [] org.hibernate.engine.jdbc.spi.SqlExceptionHelper - SQL エラー: -5501、SQLState: 42501 [エラー] [18:30:04.004] [] org.hibernate.engine .jdbc.spi.SqlExceptionHelper - ユーザーに権限がないか、オブジェクトが見つかりません: ROLE1_.NAME
Hibernate SQL 出力:
休止状態 4.2.19 を使用しています
ご覧のとおり、Hibernate は権限テーブルから name 属性の値を選択しようとしていますが、これは正しいのですが、その列がそのテーブルに存在しないと不平を言っています。
この問題を解決するにはどうすればよいですか?
hibernate - サブクラス戦略ごとにJPAテーブルを使用してレコードを保存できません
1 つの親エンティティと 2 つの子エンティティがあります。ReportDetails は親エンティティで、ReportBarChart と ReportPieChart は子エンティティです。上記の 3 つは、いくつかの共通フィールドを共有しています。そのため、詳細を保存しながら、JPA でサブクラスごとのテーブル戦略を使用しています。ただし、親エンティティの値を設定した後、エンティティを永続化すると次のエラーが発生します。
私のエンティティは
ReportDetails.java
ReportPieChart.java
この問題の解決にご協力ください。
c# - 同じ ID を持つサブクラスごとのテーブル オブジェクトがキャッシュ内で衝突する
Fluent NHibernate を使用して従来のテーブルをマップする必要があります。テーブル構造を制御できません。
テーブルは次のようになります。
の識別子の値を使用して、サブクラスごとのテーブル構造を使用してこれをマップしようとしていますTypeId
。
Cat 1
の後にロードしようとするとDog 1
、またはその逆のときに問題が発生します。
2 番目の動物を取得する前に最初の動物を立ち退かせると、うまくいきます。
Dog
aと a の両方Cat
をクラスにマップするとAnimalHome
、次の例外が発生します。
タイプ「MyNamespace」のオブジェクトをキャストできません。Dog ' と入力して 'MyNamespace. 猫」。
Dog
これにより、キャッシュはとCat
をそのタイプで区別しないと思われます。と考えているだけで、それAnimal 1
はCat 1
等しいですDog 1
。
どうにかしてキャッシュに実際のサブクラスを考慮させることはできますか? または、サブクラスごとのテーブル構造でこれが不可能な場合、このテーブルのマッピングにどのようにアプローチすればよいですか?