問題タブ [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.
fluent-nhibernate - Fluent NHibernate とサブクラスごとの継承
Base クラスと 2 つの子クラス (A:Base と B:Base) があり、それらを 2 つのテーブル (テーブル A とテーブル B) にマップしたいと考えています。Fluent NHibernateでそれは可能ですか? ので、私は持っています:
私のマッピングは次のとおりです。
ただし、その場合、3 つのテーブル (A、B、およびベース) が作成されます。それは良いことですが、テーブルの数を減らす必要があるため、A テーブルと B テーブルの両方に Base のフィールドを配置しても問題ありません。通常、A と B を (継承を使用せずに) 通常のクラスとして単純にマップしたいのですが、プロパティを持つことができる他のクラスを追加できるようにする必要があります。
BaseMap 定義を削除し、A と B を ClassMap<> としてマップするだけで、上記のプロパティを使用しようとすると、「Base のマップ定義が見つかりません」というエラーが表示されます。
performance - TPC 継承マッピングによるポリモーフィック アソシエーションは、プロフェッショナル プロジェクトでどのように扱われますか?
Entity Framework を使用してデータ中心のプロジェクトを設計および開発しているときに、次のいずれかを達成する方法を見つけるのに多くの時間を費やしましたが、実用的なものは何も見つかりませんでした。
- EF で「TPC 継承マッピング」と一緒に実装できない「ポリモーフィック アソシエーション」を実装するための代替手段を見つける- この種の継承マッピングは私のモデルの論理設計にうまく適合するため、または
- 「TPT継承マッピング」のパフォーマンスの低下を改善する方法を見つけることは、TPCの唯一の実用的な代替手段だと思われます。
私の意見では、「TPH 継承マッピング」は「データベース設計」と「データ検証」の観点からは意味がありません。
さらに、プロジェクトの他の部分はほぼ完全に Microsoft 製品に依存しているため、NHibernate などの他の ORM フレームワークに切り替える傾向はありません。
プロのソフトウェア開発者であり、この問題に直面した可能性がある方にお願いしたいと思います。他の利用可能なオプション/解決策について教えてください。この問題は通常、プロの設計/開発タスクでどのように解決されますか?
事前のガイダンスに感謝します
c# - nhibernateの流暢なマッピング遅延ロード派生クラス
nhibernate / fluentの具象マッピングごとにテーブルを取得して、データベースステートメントを発行してクラスのタイプを判別し、次に、大規模な左結合uberステートメントですべてのサブクラステーブルを結合するのではなく、詳細について別のステートメントを発行することは可能ですか?
つまり、サブクラスの詳細を「遅延」ロードできます。
流暢なnhibernateおよびClassMap/SubClassMapマッピングクラスを使用してマッピングされたクラス階層があります。各派生クラス(とにかくそれらのほとんど)には独自のテーブルがあります。つまり、具体的なクラスごとのテーブルです。
すべてのサブクラスが同じテーブルに含まれている場合に使用されるため、識別子の値は指定していません。ただし、基本クラステーブルには、それがどのタイプであるかを示す整数値があります。nhibernateはこのデータを使用し、派生クラスデータに対して遅延ロードを発行できますか?識別子の値は、基本クラスの列挙型に対応するデータベース内の整数です。
例。
java - 特定のサブクラスを使用して行を検索する基準クエリ
消毒された例から始めましょう。
私のシステムには、クラスCarがあります。Carにはいくつかのフィールドがあり、その中にはクラスGearShiftのgearShiftインスタンスがあります。
GearShiftは抽象クラスであり、AutomaticShiftとStickShiftが継承します。これは、Hibernateではサブクラスごとのテーブルとしてマップされます。
さて、オートマチックギアシフト付きの車を手に入れたいとしましょう。Hibernate基準を使用してこれを実行したいので、以下に示すように、追加できる「ofType」制限を想像しています。
これはどうにか可能ですか?
fluent-nhibernate - Fluent NHibernate 自動マッピング クラス規則がクラス階層全体に適用されない
Fluent Nhibernate を使用して単純な継承階層を自動マップしようとしていますが、各テーブルにそのクラスとは少し異なる名前を付ける必要があります (Pascal ケースではなくアンダースコア)。これは、規則を使用する明らかな場所のようです。サブクラスごとのテーブル戦略も使用したいのですが、この組み合わせが問題を引き起こしているようです。規則は階層の基本クラスにのみ適用されます。
これが私の自動マッピングです:
クラスをマップする方法 (クラス名 -> テーブル名):
私が実際に得ているもの:
ご覧のとおり、実際に変更されているのは基底クラスだけです。これが私の既存の規則です。これは、私がそれをどのように定義しているかを確認できるようにするためです。
インターフェイスも調べましたがISubclassConvention
、そこにはテーブルの名前を調整する方法がありません(これは十分に理にかなっています。サブクラスは常に独自のテーブルにあるとは限りません)。
自動マッピングから行を削除するIncludeBase
と、名前は希望どおりになりますが、table-per-concrete-class になります。すべての共通データを 1 つの共有ベース テーブルに残して、 table-per- subclassを使用したいと考えています。
名前ごとにオーバーライドを追加できます。必要に応じて追加しますが、したくありません。
これは明らかにサポートされている動作であるように思われます。table-per-concrete-class に行かずに、階層内の各テーブルに命名規則を適用するにはどうすればよいですか?
nhibernate - サブクラスごとのテーブルを持つNHibernate名前付きクエリ
名前付きクエリのみを使用してデータベースにアクセスするプロジェクトがあります。最近、サブクラス パターンごとにテーブルに従ってマッピングする予定の新しいエンティティを作成したので、ドキュメントに従ってマッピングを作成しました。各サブクラスをロードします。
これまでに行ったことは次のとおりです。
エンティティ:
マッピング:
実行しようとしているクエリは次のとおりです。
これにより、nhibernate によって次の SQL が生成されます。
ご覧のとおり、サブクラスを正しく検出し、サブクラスにのみ属するフィールド PedalType をロードしようとしますが、エイリアスを持つテーブルがないため[Gear]_1_.
、クエリは失敗します...
ペダルテーブルとの結合を試みましたが、エイリアスを次のように変換する正しい方法を見つけることができません。[Gear]_1_.
何か助けはありますか?
hibernate - 休止状態、サブクラス化、およびビジターパターン
間違った単語を使用している可能性があるため、ビジネスオブジェクト(BO)とは、Hibernateを使用してデータベーステーブルにマップされたクラスへの参照を持つクラスと、ビジネスロジックを意味します。
私が直面している問題は、リフレクションやinstanceofを使用せずに、サブクラスに適切なBOをインスタンス化することです。
たとえば、動物テーブルへの単一の参照を持つペンテーブルがあり、次に2つのサブテーブルCatとDog(すべて1対1の参照)があるとします。クラスは次のようになります。
次に、BOを使用して、BOのgetメソッド内で次のようにインスタンス化します。
次に、次のようなクラスを使用します。
私が取り組んでいるのはgetAnimalBOメソッドです。ペンの動物インスタンスに基づいて、BOの正しいインスタンスを返すようにします。
現在のペンから実際の動物をチェックするinstanceofを使用することは「できました」が、それは明らかにきれいではありません。私が考えていたもう1つの方法は、リフレクションを使用してクラス名を取得し、後で「BO」を追加してそのインスタンスを取得することでしたが、これもかなり醜いです。
getAnimalBOの周りに別のビジターパターンをラップしようとしましたが、キャストせずに適切なビジターメソッドを選択することはできず、非BOクラスにaccept-メソッドを追加したくありません。
そのメソッドを効率的に機能させるための賢い方法がない場合、コアに何か問題がありますか?Hibernateのベストプラクティスは実際には見つかりませんでした。Hibernateとビジターパターンのいくつかの例は、マップされたクラスにaccept-methodsを追加するだけですが、これは適切ではありません...
nhibernate - マッピングされていない関連付け参照 - サブクラス戦略ごとのテーブルによってマッピングされたオブジェクトのコレクション
NHibernate のマッピングに問題があり、初歩的なミスを犯したのか、それとも NHibernate の制限に遭遇したのかわかりません。
関連するマッピング hbm.xml ファイルを持つ 3 つのドメイン オブジェクトがあります。
Person
SpecialPerson
PersonCategory
SpecialPerson は Person から派生します
PersonCategory は SpecialPersons のコレクションを保持します <== これが私の悲しみの原因です
セッションを作成しようとすると、「関連付けがマップされていないクラスを参照しています: SpecialPerson」という NHibernate.MappingException が発生します。
テーブル属性を指定することは想定されていないため、適切な構文を使用していませんが、派生型を参照しようとしているときに何か他のものを使用している、または
NHibernate はオブジェクトが派生型のコレクションを保持することを許可していませんその派生型が具象クラス継承マッピング戦略ごとにテーブルにマップされていない限り、型。誰でも私を啓発できますか?
entity-framework - Code First - Discriminator IS NULL または NOT NULL の場合のマッピング
EF5 Code First で TPH 継承を使用したいと考えています。データベース内の列が null かどうかに基づいて作成したいと考えています。
このリンクは、EF4 では不可能であることを示しています。Entity Framework 4 - 「IS NULL」識別子を使用した機能 CTP5 (コードが最初) の TPH 継承
これはEF5で修正されましたか? もしそうなら、構文は何ですか?
c# - ToTableが呼び出されていない場合、EFはどのように非抽象基本型をマップしますか?
次のようなエンティティ クラスで EF5 Code-first を使用しています。
次に、派生エンティティを次のように構成します。
私のアプリケーションでは、次のように呼び出します。
この呼び出しの予想される動作は何ですか?
奇妙なことに、まったく同じように構成された階層に対して一貫性のない動作が発生しているようです。「dbo.Base」を照会しようとするために失敗する場合もあれば、「dbo.Derived」を正しく照会しようとする場合もあります。