問題タブ [discriminator]
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.
hibernate - DiscriminatorColumn を使用した Hibernate JPA カスケード削除
Hibernate の JPA 実装を使用しています。さまざまなタイプのユーザー (Private | Public など) を持つユーザー テーブルがあり、user_type 列はユーザーのタイプを指定します。
ユーザーテーブルを表すエンティティである User クラスがあります。追加した
私のUserクラスで、PrivateUserとPublicUserの2つのクラスを作成し、それぞれが対応する@DiscriminatorValueでUser Classを拡張しました。
また、ユーザー テーブルの company_id という列を使用して、1 対多の関係の PrivateUser エンティティと PublicUser エンティティを持つ PrivateCompany と PublicCompany テーブルもあります。また、両方の OneToMany リレーションシップでカスケード削除を行っています。
ID 10 の PrivateCompany と ID 10 の PublicCompany があり、次のように PrivateCompany と PublicCompany の両方のユーザー テーブルにユーザー エントリがあるとします。
PrivateCompany を削除すると、oneToMany 関係が company_id にあり、DiscriminatorColumn として言及されているにもかかわらず user_type 列が考慮されないため、ユーザー 101 と 100 を削除することになります。子の削除中に DiscriminatorColumn をアカウントするカスケード削除機能を提供する方法を探しています。複数の列で JoinColumns を作成しようとしましたが、列名との関係は作成できますが、列の値は作成できません(私の場合です)。
私の説明が明確でない場合はお知らせください。
前もって感謝します
nhibernate - サブクラスごとの NHibernate テーブルが無意味な INSERT ステートメントになる - 何が間違っているのでしょうか?
次のエンティティがあります。
次の Hibernate Conformist マッピングを使用して、これらのエンティティをマッピングします。
はEnumCustomType
、IUserType
C# 列挙型を整数列にマップする です。
この設計とマッピングは、NHibernate のリファレンス ドキュメントとこのブログ (特定のページ) (概要) を参照して多くの調査と協議を行った後に策定しました。これは私が望んでいるエンティティの設計であると確信していますが、もちろん可能です (可能性は高いですか?) マッピングを間違えました。
NHibernate を起動して構成すると、マッピングが読み込まれ、文句は言われません。ログ出力には、マッピングに関する警告はありません。ただし、 を作成しPersonUser
、そのすべてのプロパティに値を割り当て、Add
それをに割り当てるとISession
、最も奇妙なことが起こります。
重要なのは、生成された SQL を見てください。
それは意味がありません。マッピングにはまったく対応していません。1 つのテーブルの挿入ステートメントで、3 つの異なるテーブルから列を取得しています。PersonUser
AND からの列がClientUser
あり (これはあり得ないことです)、存在しないパラメーター インデックスを使用してパラメーターをバインドしており、設定したすべてのプロパティも含まれていません!
私はこれで数時間遊んでいますが、何の進歩もありません。私はここで完全に途方に暮れています。意味がありません。これを前に見た人はいますか?何が起こっているのか分かりますか?
EDIT私は言及するのを忘れました:User
IDでジェネリックを取得できるようにしたいので、ここでディスクPersonUser
リミネーターを使用しClientUser
ています。
doctrine - Doctrine とのジャンクション テーブルの識別子
FileAttachment エンティティを追加できるようにしたい、関連のないエンティティが多数あります。私は Doctrine2 を使用しています (Symfony プロジェクトのコンテキストで)。
Doctrine を使い始める前は、次のように識別子列を持つジャンクション テーブルを作成していました。
私が知る限り、Doctrine では、FileAttachment 関連付けを持つエンティティ タイプごとにジャンクション テーブルが必要です。できればそれは避けたいです。ここでNHibernateソリューションを見つけました。Doctrine で同様のことを行うことは可能ですか? Doctrine マニュアルの第6章と第7章を (何度も読みました!) 読みました。しかし、探しているものが見つかりません。
sql - Entity Framework でエンティティを保存するときに「識別子」列を設定しない
私は基本クラスの Person を持っています:
ネストされたクラスDoctorがあります:
テーブル パーソン スクリプト
そして、新しいDoctorエンティティを保存しようとすると、エラーが発生します:
値 NULL を列 'Discriminator' に挿入できません
この状況で何が間違っていますか?なぜEFはディスクリミネーターフィールドに「Doctor」値を保存しないのですか?
アップデート:
DBContext の一部: