問題タブ [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.
nhibernate - なぜ私のディスクリミネーターがプロキシとして返されるのですか?
私Status
のPOCOの1つに、弁別子として機能するプロパティがあります(を使用するのと非常によく似ていますenum
)。
Status
これは、列を持つHBMの一部です。
Status
そして、これが私のテーブルのHBMです。
最後に、これが私のQueryOver
です。
このクエリはエラーなしで実行されますが、Status
プロパティが正しく初期化されていません。値を使用しようとすると、Status
この例外が発生します。
NHibernate Profilerを見ると、実際には適切なを選択していることがわかりますStatus_id
。
私のHBMまたはクエリの何が問題になっていますか?
すべてのステータスを正常に照会し、すべてのステータス識別子オブジェクトのリストを受け取ることができることに注意してください。また、生成されたプロキシオブジェクトにはStatus
オブジェクトの正しい値が含まれているため、NHibernateは正しい値を適切に返していることがわかります。
java - 休止状態-ディスクリミネーターを使用する必要がありますか?
Hibernateを使用して一部のデータをマップするために、サブクラスごとのテーブルアプローチを採用しています。通常、データベースレイヤーでは、抽象テーブルとそのサブテーブルに型列を導入します。これにより、抽象レコードは一致する型のサブレコードにのみ関連付けることができます。ただし、さまざまなリソースを見ると、Hibernateディスクリミネーターがレガシーデータベースに使用されていることがわかります。これは私が間違ったアプローチを取っていることを意味しますか?
java - Hibernate 継承マッピングの別のテーブルからの識別子の値
私は2つのテーブルを持っていprice_feed
ますprice_feed_type
. 価格フィードには、価格フィードのさまざまな実装のデータが含まれます。
現在、これは通常<discriminator>
、テーブル内の識別子フィールドを使用して、タグを介して行われprice_feed
ます。ただし、システムのコンテキストでは、このフィールドがprice_feed_type
テーブルにある方が望ましいでしょう。<discriminator formula="..."/>
私はその方法に出くわし、これを使ってみました。
formula
1 つの解決策は次のとおりです (これが属性に入力されていると仮定します)。
別の解決策は次のとおりですpriceFeedID
。price_feed.price_feed_type_id
どちらでも次のエラーが発生します。
追加のメモ、括弧なしでは、エラーが発生します:
これを修正する方法についてのアイデアはありますか?
編集:
これまでに見つけたものを追加するには:
どちらかを使用してSELECT *
、 を実行してSELECT implementing_class
から外部で実行すると、別のエラーが発生します。完全なコード:
エラーは次のとおりです。
hibernate - DiscriminatorOptions と orphanremoval を使用して継承されたエンティティを持つ JPA OneToMany
ここ数日解決できない問題があります。多くのドキュメントを読み、多くのフォーラムを検索しましたが、解決策が見つかりませんでした。コードが以下に示すように、クラスを継承しました。
OneToMany realions の多くの側でこれらの特定のエンティティを使用したいと思います。
このニュースレター エンティティを永続化すると、すべてのレコードが適切に作成されます。リストの内容を変更すると、古いレコードがテーブルに残り、新しいレコードが作成されるため、 orphanRemoval = true 属性は効果がないように見えます。基本エンティティから @DiscriminatorOptions アノテーションを削除すると、古いレコードは削除されますが、継承識別子が機能しなくなるため、JPA プロバイダー (休止状態) はすべての子レコードをすべてのコレクションにロードしようとし、それが組織につながります。 .hibernate.loader.Loader.instanceAlreadyLoaded 例外。
このようなモデルの実装に成功した人はいますか、またはこの問題の回避策を知っていますか?
java - Hibernate 4:InheritanceType.JOINEDディスクリミネーター列の値を永続化する
ドキュメントの単純なJOINED階層があります。
ご覧のとおり、すべてのサブテーブルはDocumentsテーブルの同じIDを共有しています。それ以外SystemDocuments
は、binary_data
列をExternalDocuments
追加し、新しいプロパティを追加しません。'official'
(また、で示される階層には他に2つの具体的なサブテーブルが'individual'
あり、ここでは関連性がないことに注意してください。)
上記のテーブルのマッピングは次のとおりです。
Document.java:
SystemDocument.java:
ExternalDocument.java:
後者のクラスは、ドキュメントのディスクリミネーター列の値にマップされることになっています'external'
。EntityManager.findを介してエンティティを検索すると、ディスクリミネーターが正しく返されます。これは、実際には、テストデータのディスクリミネーターがDBに正しく挿入されているためです。
次に、次のコードを使用して、JPAとファイルアップローダーを介して新しいドキュメント/ファイルをシステムに挿入します。
ただし、DBを調べると、Hibernateがディスクリミネーター値をテーブルの列に挿入していないことがわかります。'external'
Documents
discriminator
これについては過去に問題がありました。https://hibernate.onjira.com/browse/ANN-140を参照してください。最近では、Hibernate 4https : //hibernate.onjira.com/browse/HHH-4358を参照してください。それはそのように機能することになっていますか?
次に、現在のHibernate 4 APIドキュメントでhttp://docs.jboss.org/hibernate/core/4.0/javadocs/org/hibernate/annotations/DiscriminatorOptions.htmlを見つけましたが、機能しません(@DiscriminatorOptionsを参照してください。ドキュメントクラス)。
生の注釈を使用してHibernate4に識別子を挿入するにはどうすればよいですか?
注:ディスクリミネーター列を通常の列としてマップしたくありません。
vb.net - 識別子による階層グループごとの Entity Framework 4.2 テーブル
私は、EF 4.2 コードの最初のモデルを使用してプロジェクトに取り組んでいます。このモデルには、製品の TPH 継承構造が含まれています。この継承モデルのポリモーフィックな結果をディスクリミネーターでグループ化する必要があり、いくつかの問題が発生しています。
エンティティ フレームワークは、このグループ化を完了するための識別子を公開しません。私の最初の質問は、この識別器に直接アクセスできるかどうかです。私の読書と経験は私にノーと言っているので、私はこの種の作品の解決策を思いついた. うまく機能しておらず、どのように維持する必要があるかについて満足していません.
私のクラスは次のようになります(簡略化):
製品を受け取り、そのベースタイプ名を文字列として返す拡張メソッドを構築しました。
そこで、製品の結果をタイプごとにグループ化する構造を構築して、それらを実行できるようにしました。
リストをループして目的の動作を取得できるようになりましたが、パフォーマンスは理想的ではなく、製品の数が増えるにつれて受け入れられなくなるのではないかと心配しています。
また、これにより共有プロパティ (名前) に簡単にアクセスできますが、これらを実際の型にキャストするための多くのオプションがありません。. .
任意の推奨事項を歓迎します。また、上記のコード エラーをご容赦ください。現時点ではプロジェクトにアクセスできないため、メモリから例を再入力しました。
java - ディスクリミネーター列を持つオブジェクトの Eclipselink 遅延読み込みの問題
アプリケーションには次の階層があります。
他のオブジェクトでは、次のようなエンティティをロードしようとしています:
すべての階層をロードするプリコンパイル済みクエリがあり、他の親オブジェクトをロードします。クエリのヒントもあります - eclipselink.left-join-fetch=PP.VCBE.validationMeasures (これが eclipselink.left-join-fetch=PP.VCBE.minimalDemands に変更された場合、最小限の要求がロードされますが、検証メジャー (ディスクリミネータ 1 のエントリ) も最小需要コレクションにロードされますが、ロードしないでください)。
ここで、クエリが実行されると、validationMeasures コレクションがオブジェクトで満たされている場合、これらのオブジェクトはすべて実際には最小限の要求であり、データベース内の識別子の値として 2 があります。
実行されるクエリは次のとおりです。
ご覧のとおり、クエリに DISCRIMINATOR 制約がありません。なぜですか?
そのような行動のアイデアはありますか?そして、ディスクリミネーターの値に応じて、コレクションをロードするようにeclipselinkに指示するにはどうすればよいですか?
c# - 条件として使用されている Discriminator (__Disc__) フィールドを変更するにはどうすればよいですか
テーブルの Discriminator( _ Disc _ ) フィールドを更新および変更する必要がありますが、マップされたエンティティにはエンティティ メンバーとしてそれがありません。解決策はありますか?
hibernate - hbmファイルのプロパティとしてディスクリミネーター列を公開する
システムには、リソースのキーと値のペアを格納するテーブルがあります。値を格納するための2つの列があります。小さい値の場合はVARCHAR列、大きい値の場合はCLOB。Java側では、これらはStandardResourceBundleValueまたはLargeResourceBundleValueの2つのクラスのいずれかにインスタンス化され、1つのテーブルでそれらを区別するために識別子列が使用されます。
楽しい部分は次のとおりです。キーの値が最初は小さく(そしてStandardResourceBundleValueとして保持され)、値がVARCHARよりも大きい値に変わる場合は、それをStandardResourceBundleValueに変換する方法が必要です。これが発生しているコードでは、StandardResourceBundleValueを削除して、LargeResourceBundleValueを作成することはできません。これは、制約違反の原因となるためです。
私たちがやりたいのは、その識別子列のプロパティを定義することです。これにより、基本クラスはオブジェクト内のその値を変更するメソッドを持つことができるため、再度永続化されると、CLOBに値が保存されます。
テーブルを作成しようとすると、次のエラーが発生します。
エンティティのマッピングで繰り返される列:com.foo.resourcebundle.LargeResourceBundleValue列:RESOURCE_TYPE(insert = "false" update = "false"でマッピングする必要があります)
明らかに私が何をしようとしているのか理解していませんが、それを行う方法があるべきであることは理にかなっています。では、どのようにしてディスクリミネーターフィールドをプロパティとして公開しますか?
ありがとう。
entity-framework - Code First: Discriminator によるクエリ。私は知っている、私はする必要はないはずです
TPH コード ファースト tmodel を作成し、必要な識別子列に NotMappedAttribute を追加しました。サブクラスのコンテキストに DbSet を追加し、これらの型付きセットによってクエリを実行できます。コード ファーストは今でも私の友人です。
ただし、それ自体が BaseType のコレクションを含むエンティティがあり、そのうちのいくつかはあるタイプであり、別のタイプであるとします。型指定されたレコードを取得するクエリを作成するにはどうすればよいですか? ちなみに、遅延ロードされたメモリ内コレクションではこれを行いたくありません。
Association という名前のクラスと、いくつかのサブクラス AssocA および AssocB があるとします。これらはすべて Associations テーブルにマップされ、AssocationTypeId で識別されます。ここでエンティティがあると仮定します - 引数のためにそれを Employee と呼びます。たとえば
データベースにクエリを実行して、AssocA = ? の従業員を検索します。関連付けを ? に等しくしたくないだけです。しかし、特定の型付けされた関連付け。LinqToEntities が動作しないため、GetType を使用できません。コード最初のマッピングで使用されるため、AttributeTypeId は使用できません。
私は何が欠けていますか?私がしていることは合理的です。しかし、私はそれをモデル化することはできません。