問題タブ [union-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.

0 投票する
1 に答える
438 参照

nhibernate - NHibernate がユニオン サブクラスのサブクエリを特定の ID に制限しないのはなぜですか?

Ayendeは、 NHibernate Mapping – Inheritanceに関する投稿で、さまざまな NHibernate 継承戦略がどのように機能するかを概説しています。彼の union-subclass の説明は、さまざまなテーブルを結合するサブクエリを使用して生成された SQL を示しています。次に、このサブクエリが選択されます。

私が理解していないのは、このようにマップされたオブジェクトを参照するときに、サブクエリが参照された ID によって制限されない理由です。これは非常に効率が悪いように見えるので、私は心配しています。Companies テーブルと People テーブルのレコード数が増えると、それぞれからすべてを選択するのに時間がかかります。Parties オブジェクトの ID でサブクエリを単純に制限すると、すべてのレコードを後で制限するのではなく、少なくとも各テーブルから特定のレコードを取得することになります。

生成された SQL のポイントをよりよく説明すると、およそ次のようになります。

特定のパーティを参照するときに、生成された SQL が正しくないのはなぜですか?

2 番目の方法はより効率的で、Company テーブルと People テーブルが大きくなっても適切なインデックス作成が損なわれないことを前提としています。この質問は、私の質問へのさらなる調査によって引き起こされました: how to map a UnionSubclass so that queries generated from it are limited .

0 投票する
2 に答える
1673 参照

c# - NHibernate が具象クラス マッピングごとのユニオン サブクラス テーブルで Identity を使用できないのはなぜですか?

いくつかの情報源は、NHibernate が具象クラスおよび共用体サブクラスごとのテーブルで ID を使用できないと述べています。これは本当ですか?この背後にある正確な理由は何ですか?

0 投票する
1 に答える
987 参照

hibernate - Hibernate でユニオン サブクラスの生成された SQL によって引き起こされるパフォーマンスの問題を克服する方法

TABLE_PER_CLASS 継承戦略の Hibernate サポートを使用しています。機能的にはうまく機能します。ポリモーフィック クエリが発行されるたびに、Hibernate は 2 つの具体的なクラス A と B に対して「union all」を含む SQL を生成します。生成された SQL の形式は次のとおりです。

このアプローチの問題は、DB 側のパフォーマンスが非常に悪いことです。C1 列が ClassA と ClassB (abstractparent から派生) の共有プロパティであることを考慮すると、Hibernate は両方のサブ select に where 句を挿入し、パフォーマンスを劇的に向上させることができます。例えば、

制限でいくつかの最適化を行うこともできます。DAO レイヤーで Hibernate 基準 API を使用しています。

引数が表示されないため、インターセプター、onPrepareStatment() を使用できませんでした。作業のこの段階で DB 固有の最適化を回避したいため、DB でパーティションやその他のオプションを使用することは現在範囲外です。

パフォーマンスを向上させるために休止状態を操作する方法はありますか?

0 投票する
1 に答える
907 参照

mysql - Hibernate 継承のパフォーマンス

MySQLデータベースでHibernate 3を使用しています(Hibernate 4で試しましたが、成功しませんでした)。具体的なクラスごとのテーブル継承戦略 (ユニオン サブクラス) を実装しました。

多態的なクエリを除いて仕事をします。Hibernate は、「where」句が高レベルのクエリにある UNION ベースのクエリを生成します。

これにより、具象テーブルのコンテンツ全体がロードされるため、パフォーマンスが非常に低下しますが、pkey は抽象的な親の属性であるため、サブセレクトで「where」句を定義できます。

したがって、目的は、Hibernate がこの種のクエリを生成するようにすることです。

このようにして、クエリは瞬時に実行されます。

この動作を変更するために Hibernate を構成する方法について何か考えはありますか?

ありがとう

Y.

0 投票する
2 に答える
1458 参照

nhibernate - NHibernateユニオンサブクラスを使用して抽象プロパティをマップする方法は?

ここでAyendeの投稿を参照してください:http: //ayende.com/blog/3941/nhibernate-mapping-inheritance

パーティーに抽象的な名前プロパティを追加することで、上記の投稿のユニオンサブクラスマッピングを少し拡張することで到達できる同様の状況があります。モデルは次のようになります。

次の方法でパーティを照会できるマッピングを探しています。

私が使用しているマッピング:

両方のための

これは期待どおりに動作し、名前をクエリして一致する結果を取得できます。しかし、私がするとき

クエリはPersonsとはまったく一致しませんが、会社のunion-subclassからのマッピングを使用します。したがって、Partyでパラメーター化された場合、クエリはCompanyでパラメーター化された場合と基本的に同じように見えます(クエリのWHERE句は次のとおりです。WHEREthis_.company_name =((E'firstname lastname'):: text))

私がどこで間違っているのか、そして私が求めていることをどのように達成するのかについての指針はありますか?

0 投票する
1 に答える
3141 参照

c# - Nhibernate : ID 列のキー生成を使用できませんマッピング:

Email&Smsエンティティがエンティティから継承される 3 つのエンティティがありMessageます。

マッピング :

このメッセージによる例外があります: Cannot use identity column key generation with <union-subclass> mapping for: Core.Domain.Model.Message

Id代わりに生成するための戦略が必要nativeですか?Id の値は 1,2,3,4,5,6,... で、1,3,5 はメール用、2,4,6 は SMS 用です。

0 投票する
1 に答える
1309 参照

c# - オブジェクトがターゲット タイプと一致しません。ゲッターで例外が発生しました

私は大きな問題を抱えています!nhibernate で抽象クラスを複数のユニオン サブクラスにマッピングすると、例外が発生し続けます。ユニオン サブクラスを 1 つだけ使用すると、エラーは発生せず、すべて正常に動作します。さらにサブクラスを使用すると、次のエラーが発生します。

[TargetException: オブジェクトがターゲット タイプと一致しません。] System.Reflection.RuntimeMethodInfo.CheckConsistency(オブジェクト ターゲット) +10909543 System.Reflection.RuntimeMethodInfo.InvokeArgumentsCheck(オブジェクト obj、BindingFlags invokeAttr、バインダー バインダー、Object[] パラメーター、CultureInfo カルチャ) + 115 System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder バインダー, Object[] パラメータ, CultureInfo カルチャ) +54 System.Reflection.RuntimePropertyInfo.GetValue(Object obj, BindingFlags invokeAttr, Binder バインダー, Object[] インデックス, CultureInfo カルチャ) +61 System.Reflection.RuntimePropertyInfo.GetValue(Object obj, Object[] index) +19 NHibernate.Properties.BasicGetter.Get(オブジェクト ターゲット) +99

[PropertyAccessException: MedControlWeb.Models.Logs.Log.Code の getter で例外が発生しました] NHibernate.Properties.BasicGetter.Get(オブジェクト ターゲット) +183 NHibernate.Engine.UnsavedValueFactory.GetUnsavedIdentifierValue(String unsavedValue, IGetter identifierGetter, IType identifierType, ConstructorInfo constructor) +160 NHibernate.Tuple.PropertyFactory.BuildIdentifierProperty(PersistentClass MappedEntity、IIdentifierGenerator ジェネレーター) +200 NHibernate.Tuple.Entity.EntityMetamodel..ctor(PersistentClass persistentClass、ISessionFactoryImplementor sessionFactory) +775 NHibernate.Persister.Entity.AbstractEntityPersister..ctor(PersistentClass persistentClass) 、ICacheConcurrencyStrategy キャッシュ、ISessionFactoryImplementor ファクトリ) +835 NHibernate.Persister.Entity.UnionSubclassEntityPersister..ctor(PersistentClass persistentClass、ICacheConcurrencyStrategy キャッシュ、ISessionFactoryImplementor ファクトリ、IMapping マッピング) +220 NHibernate.Persister.PersisterFactory.CreateClassPersister(PersistentClass モデル、ICacheConcurrencyStrategy キャッシュ、ISessionFactoryImplementor ファクトリ、IMapping cfg) +369 NHibernate.Impl.SessionFactoryImpl..ctor(構成 cfg、 IMapping マッピング、Settings 設定、EventListeners リスナー) +2199 NHibernate.Cfg.Configuration.BuildSessionFactory() +181ctor(構成 cfg、IMapping マッピング、設定設定、EventListeners リスナー) +2199 NHibernate.Cfg.Configuration.BuildSessionFactory() +181ctor(構成 cfg、IMapping マッピング、設定設定、EventListeners リスナー) +2199 NHibernate.Cfg.Configuration.BuildSessionFactory() +181

私の hbm ファイル:

私の抽象スーパークラス:

サブクラスの 1 つ:

どこが間違っていますか?

編集: このエラーを解決するにはどうすればよいですか? 適切な get メソッドがあるので、どうすれば修正できるのかわかりませんか?

0 投票する
1 に答える
1725 参照

c# - 子コレクションへのアクセス時に「NHibernate.ObjectNotFoundException: 指定された識別子を持つ行が存在しません」

ちょっとした説明: クーポン シリーズとシリーズにリンクされたクーポンがあります。一部のクーポンは有効化されない場合があり、それらは別のテーブルに保存されます。ここに私の.hbm.xmlファイルがあります:

いずれかのクーポンを削除した後

、シリーズのクーポンのリストを取得しています(.First()は簡単にするためです)。

エンティティCouponSeriesの子コレクションCouponsを列挙しようとすると、次のような完全なコールスタックで前述の例外が発生します。

誰が問題を知っていますか?多くのトピックで示唆されているように、not-found="ignore"many-to-oneに設定しようとしましたが、それは私の状況に共通するものは何もありません。