問題タブ [joined-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.
java - 結合されたサブクラスを使用する場合の org.hibernate.Query.list からの結果リストの制御
Hibernate を使用してデータベースの「USERS」テーブルにマップされた User クラスがあります。クラス ApplicationUser もあり、User クラスを拡張し、Hibernate の結合サブクラスとしてデータベース テーブル「APPLICATIONUSERS」にマップされます。このような:
私が抱えている問題は、ユーザーのリストを取得すると (一部は「通常の」ユーザーであり、一部はアプリケーション ユーザーである可能性があります)、すべてが正常に機能することです。各項目が User または ApplicationUser オブジェクトのいずれかである List オブジェクトを取得します。メソッド(少し簡略化されていますが、タイプミスが含まれている可能性があります):
ただし、ApplicationUser であるユーザーが 1 人しか見つからない場合、リストには、同じユーザーを表す 1 つの User オブジェクトと 1 つの ApplicationUser オブジェクトの 2 つのオブジェクトが含まれます。これは、呼び出し元のメソッドが各リスト項目が異なる一意の User オブジェクトであることを期待している場合などに問題になります。
リストのサイズが 1 の場合でも、各オブジェクトが異なるユーザーを表すリストを返す他の方法を使用するなど、このケースを手動でチェックする代替手段はありますか?
nhibernate - NHibernate - 「無効なキャスト」例外を引き起こすサブクラス継承ごとのテーブル
次のNHibernateマッピングを使用した単純なサブクラスごとのテーブル継承があります
したがって、クレジットカードと銀行口座の両方が「請求の詳細」から継承されます。私のドメインレイヤー内には、次のステートメントがあります。
上記の「unitOfWork.Context」プロパティは、ISession 作業単位へのアクセスを提供するだけです。アプリケーションを実行すると、次のエラーが表示されます。
BillingDetail = 'unitOfWork.Context.BillingDetail' は、タイプ 'NHibernate.PropertyAccessException' の例外をスローしました
「varbillingDetail...」ステートメントにブレークポイントを設定し、プログラムを実行してこのエラーを調べると、上記のメッセージが表示されます。ただし、再生をクリックしてプログラムの実行を続行すると、上記のメッセージが表示される代わりに、プログラムは正常に実行され、すべてのデータがデータベースに入力されます。ブレークポイントを検査しないと、プログラムがクラッシュします (実際にマッピングに問題がある場合は予想通りです)。
発生しているように見えるのは、「BankAccount」エンティティが発生するたびに例外が発生することですが、すべての CreditCard エンティティは問題ありません。BankAccount オブジェクトを除外しないという "OfType" に何か問題がありますか?
java - Hibernate は、注釈の使用中に結合されたサブクラス テーブルを作成できません
私は Hibernate を初めて使用し、Hibernate アノテーションの使用中に結合サブクラス テーブルを作成できません。
これが私のコードです。
これがメインクラスです。
そして Staff クラスは User クラスを拡張します。
単体テストを実行すると、エラーが発生します。
これがエラーです。
本当にありがとう!
fluent-nhibernate - FluentNHibernate-サブクラスごとのテーブルとクラスごとのテーブルの階層の混合
次の構造を与えます、
Table-per-subclassとtable-per-class-hierarchyの組み合わせを使用して、Fluent NHを使用してこれらを正しくマッピングするにはどうすればよいですか?カスタムのAutomappingConfigurationを試しましたが、円を描いて回っているようです。
私の調査から、FNHを使用する場合、Discriminatorの使用はバイナリの選択肢であるように見えますが、HBMには、Discriminator列とサブクラスを同時に持つ機能があります。
c# - ベースクラステーブルに参加していないサブクラスのNHibernate(3.1)サブクエリ
以下は、私が抱えている実際の問題の抽象化です。
マッピング:
以下は、サブクエリ内の結合されたサブクラスでの結合に失敗します。
SQL
サブクエリの subs1_1_ (例: sub_table) に Foo がないため、GenericADOException がスローされます。サブクエリで Subs を Base と完全に結合させるために、Other のマッピングで何かしなければならないことはありますか?
java - Hibernateの結合サブクラスを使用して、スーパーテーブルとサブテーブルの列を複製し、それらの同期を維持することは可能ですか?
ですから、私には興味深い状況があります。元の開発者が列挙型とswitchステートメントを優先して継承の使用をやめることにしたコードの大きな混乱を継承しました...これはこのアンチパターンの完璧な例です 今度はリファクタリングする時が来ました、そして私は最高のものを決定しましたそれを実行する方法は、共有列を持つテーブルに裏打ちされたスーパークラスを引き出してから、結合されたサブクラス継承戦略を使用することです。ここまでは順調ですね...
ここで注意が必要なのは、このコードがすでに本番システムにデプロイされていることです。したがって、リファクタリングされたコードは、そこにあるスキーマ/データと下位互換性がなければならず、将来の1つのリリースまで、サブクラステーブルから冗長な列を削除し始めることはできません。好むと好まざるとにかかわらず、1つのリリースサイクルで親テーブルと子テーブルの間で列を複製します。
私にとって幸運なことに、親テーブルと子テーブルの間に重複する列があることを確認しても、Hibernateは反転しません。ただし、悪いニュースは、両方のテーブルで重複している列が更新されないことです。親テーブルの列は更新されますが、子テーブルの列は古くなったままになります。
現在のコードとの下位互換性のために、両方のテーブルの列を更新したいと思います。そうすれば、リリースをロールバックして古いスキーマに戻らなければならない場合でも、エンティティの更新が失われることはありません。トリガーを介してこれを処理できることはわかっていますが、トリガーにはレーダーの下を飛ぶという厄介な習慣があるため、コードのみのソリューションを探しています。
両方の列をヒットするように休止状態を説得する方法を教えてくれる人はいますか?
私のクラスの非常に不自然な例は次のとおりです。
一致するテーブルを使用して:
新しいサブクラスエンティティを挿入すると、サブクラステーブルの重複する列はNULLになります。
本当にありがとう!
java - アノテーションを使用する場合の結合サブクラスの不明なエンティティの問題
注釈付きの結合サブクラスを使用しているときに例外が発生しました。修正方法がわかりません。助けてください。
例外は次のとおりです:org.hibernate.MappingException:不明なエンティティ:B
コード:
クラスA
クラスB
テーブル
Hibernate.cfg.xml
TestClass
例外:
fluent-nhibernate - Fluent NHibernate Automapping で結合されたクラス マッピングの列を変更
遺産があります
エンティティは、オーバーライドされたメソッド Equals、GetHashCode などの NH クラスの標準です。そして、AutMap 書き換え .IncludeBase() を使用します
Fluent NHibernate Automapping で得た
結合されたサブクラスのキー列の名前を UserEntityId から EmployeeId に変更したい
私は試します
しかし、成功しませんでした。
現時点では、NuGet パッケージの最新の FNH である FluentNHibernate 1.2.0.712 を使用しています。また、この構成を無視して何らかの形で影響を与える可能性のある構成と規則がはるかに多くありますが、明確な解決策で試してみましたが、同じ否定的な結果が得られました。
nhibernate - 結合されたサブクラスとしてマップされた Nhibernate の複数レベルの階層が、基本クラスのプロパティで機能しない
次の階層があります。
ClassB にはPropertyAがあります。すべてのクラスは、クラスごとのテーブルを持つ結合されたサブクラスとしてマップされます。
マッピングはエラーなしで解析されますが、クエリを実行しようとするとエラーが発生します。
エラーは次のとおりです。
NHibernate.QueryException: プロパティを解決できませんでした: PropertyA of: ClassC
ClassD のインスタンスを永続化するときに別の関連エラーが発生するようですが、まずこれを修正したいと思います。
なぜそれが起こるのですか?
inheritance - 関連する結合されたサブクラスでの Hibernate カスケード削除
私は現在、小規模な PoC プロジェクトに取り組んでおり、永続化の部分でNHibernateを試してみることにしました。
次のドメイン エンティティを定義しました。
- Location :ロケーションを表す抽象クラス (ロケーション ツリーのルート)
- FixedLocation :地理的に固定された場所を表す抽象クラス (Location から派生)
- Country : 国を表します (Location から派生)
- City : 国内の都市を表します (Location から派生し、Country なしでは論理的に存在できません)
要件:
- すべての場所は最終的に場所から派生する必要があります (関連して、すべての場所の子孫は同じ範囲のデータベース キーを共有します)。
- Country と Cityの間に双方向の関係が存在する必要があります
- 削除はエンティティ ツリー全体にカスケードする必要があります。たとえば、国を削除すると、関連する都市も削除されます。
上記のクラスをどのようにマッピングしたかを次に示します
これらのクラスをこのようにマッピングすると、上記の要件が満たされるか、少なくとも部分的に...
2 つの関連付けられた City オブジェクト (場所 ID 2 と 3 など) を持つ Country エンティティ (場所 ID 1 など)をDelete()すると、次のようになります。
- FixedLocationId=1のレコードがCountries テーブルから削除されます
- FixedLocationId=2 および 3のレコードがCities テーブルから削除されます
- LocationId=1のレコードがFixedLocations テーブルから削除されます
- Id=1のレコードがLocations テーブルから削除されます
ここまではとても良いのですが...
- LocationId=2 および 3のレコードは、FixedLocations テーブルから削除されません
- Id=2 および 3のレコードは Locations テーブルから削除されません
ここで何が間違っていますか?そもそもこれできるの?
タグのon-delete="cascade"属性を設定しようとしましたが、 NHibernateは循環カスケードが許可されていないと文句を言いました...