問題タブ [composite-id]

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 投票する
3 に答える
3867 参照

hibernate - 継承されたクラスを持つ JPA / Hibernate の複合キー

以下のように、クラス構造で定義された複合 ID があります。残念ながら、見つからない「part2」について不平を言う休止状態エラーが常に発生します。

「@IdClass のプロパティがエンティティ MoreClass に見つかりません: part2」

誰でも問題を解決するのを手伝ってくれますか? (または、少なくとも役立つ jpa/hibernate doc を教えてください。)

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

nhibernate - NHibernate: merge() の使用時に子の複合 ID が更新されない

マッピング:

エンティティ:

単体テスト:

nHib によって生成される SQL:


SO、ご覧のとおり、問題は、親が保存された後に nHib が子を複合 ID に更新せず、子を保存しようとして失敗することです。どうして??これらの ID を更新するように nHib を作成するにはどうすればよいですか? また、Merge() の代わりに SaveOrUpdate() を使用すると、正常に動作します!! しかし、マージを使用する必要があります。助けてください!

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

fluent-nhibernate - Fluent NHibernateは、コンポジットキーに挿入した後に更新を行います

FluentNHibernateを使用して複合キーをマッピングしています。親が作成されたときに、新しく挿入された親キーを受け取るために子エンティティが必要です。これは機能しますが、NHibernateは子に対して挿入を実行し、その後、子の複合キーIDの1つに対して更新を実行します。

実体関連は次のとおりです。

1)モデル(親)-多くのFactorWeightsがあります。
2)FactorWeight(子)には1つのFactorがあります。
3)因子は、モデルごとに異なる重みを持つことができます。

モデルには多くのファクターがあり、ファクターはモデルごとに異なる重みを持つことができるため、FactorWeightエンティティにはModelIDとFactorIDの複合キーが必要です。

モデル:

要素:

FactorWeight:

マッピングは次のとおりです。

モデル:

FactorWeights

次のコードを使用して、Modelオブジェクト内にFactorWeightを作成します。

以下は、エンティティ(モデルがメソッドに渡される場所)を永続化するために使用されます。

Modelエンティティは、FactorWeightと同様にエラーなしで保存されます。問題は、SQLプロファイラーが挿入直後にFactorWeight.ModelID列に更新を表示することです。NHibernateは、FactorWeight.ModelIDを、挿入にすでに存在していた新しく挿入されたModelIDで更新します。

SQlプロファイラートレース:

これは複合キーのマッピングの問題だと思います。

NHibernateのバージョン2.1.2.400とFluentNHibernateのバージョン1.1.0.685を使用しています。

ありがとうございました。

0 投票する
0 に答える
575 参照

fluent-nhibernate - Fluent NHibernate HasManyToMany() IDictionary<> 複合 ID の問題

特に辞書マッピングに関しては、FNH1.0とはわずかに異なる構文を使用するFluent NHibernate 1.1.1.694を使用しています。

私のモデルには、Employees、Addresses、および AddressTypes (郵便、物理など) があります。

私のマッピング

次の .hbm.xml スニペットが生成されます。

生成したい.hbm.xml

親キーに使用する複合 ID があることをどこにも伝えていないため、明らかにこれは失敗します。しかし、私はそれを伝える方法を見つけることができません。.Columns と .ParentKeyColumns は .HasManyToMany<Key,Value>() には存在しません

これをどのようにマッピングすればよいですか?

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

nhibernate - マップされたクラスへの流暢なNHibernatecompositeid

CompositeIdを使用して別のクラスをマップする方法を理解しようとしています。テストケースは次のとおりです。

テーブル:

C#のクラス:

Fluent NHibernateマップ:

新しいレコードを追加しようとすると、次のエラーが発生します。

System.ArgumentOutOfRangeException:インデックスが範囲外でした。負ではなく、コレクションのサイズよりも小さい必要があります。パラメータ名:インデックス

このエラーは、CompositeIdおよびReferences呼び出しでマップされているTestParentId列が原因であることがわかっています。ただし、References呼び出しを削除すると、TestParentIdに基づいてTestChildを照会するときに別のエラーが発生します。

クエリを実行するコードは次のとおりです。

このシナリオの複合キーを作成する方法についてのアイデアはありますか?

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

fluent-nhibernate - Fluent Nhibernate 3マッピング合成フィールド(カスタムタイプ)

こんにちは、私のシナリオ

ここで、関数とプロファイルは2つの簡単にマップされるエンティティです。実行すると、次のエラーが発生します。

次のタイプを判別できませんでした:Data.Model.Entities.Function、Data.Model、Version = 1.0.0.0、Culture = neutral、PublicKeyToken = null、列の場合:NHibernate.Mapping.Column(FunctionID) "}

これを回避する方法はありますか?最終的には、2つのカスタムマップクラスによって作成されたCompositeIDを使用してクラスを作成する必要があります。intフィールドでcompositeIDを使用すると、チャームのように機能します

前もって感謝します

関数(プロファイルのような)マッピング

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

nhibernate - nhibernate で複合 ID のリストからオブジェクトをロードする

私がやりたいことは、ID のリストを受け取り、読み込まれたオブジェクトのリストを返す HQL クエリを作成することです。しばらくすると、このようなものが機能することがわかりました

ただし、これは、アプリが次の例外をスローする複合 ID に使用しようとすると、単一の ID に対してのみ機能します。

System.ArgumentOutOfRangeException : インデックスが範囲外でした。負ではなく、コレクションのサイズより小さくなければなりません。パラメータ名:インデックス

私は無知です...

休止状態の使用方法を説明できることを期待して、id オブジェクトのカスタム型を作成しましたが、うまくいきませんでした。

何かアイデアはありますか?

ありがとう

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

hibernate - Hibernate:複合 ID 主キーの一部を変更して新しい行を挿入しますか?

データベースに新しい行を挿入しようとしていますが、オブジェクトを挿入する必要があることを Hibernate に認識させることができません。Sponsor テーブル、Course テーブル、および 2 つの共通部分である SponsorCourse テーブルがあります。SponsorCourse の主キーは、スポンサーの主キーとコースの主キーの 2 つの整数を保持するクラス SponsorCoursePK の複合 ID です。SponsorCoursePK は equals() と hashcode() を実装しています。

私の目標は、すべての SponsorCourse 行を含む Course テーブルのディープ コピーです。

  • 最初に、既存の Course 行に関連付けられた SponsorCourses のリストを Hibernate に要求します。
  • 次に、新しい Course オブジェクトを作成し、それをデータベースにコミットします。(従来の理由により、Course オブジェクトは Hibernate によって管理されません)。
  • 次に、Hibernate が古いコース用に提供してくれた SponsorCourses のリストを繰り返し処理し、SponsorCourse のプライマリ キーの、コース ID を保持する部分を古いコース ID から新しく作成されたコースの ID に変更します。
  • 次に、saveOrUpdate を呼び出して、Hibernate に新しい行を作成させようとします。

SQL Hibernate 送信を見ると、'insert' ステートメントが存在しません。Hibernate は、新しいオブジェクトが「ダーティ」であり、主キーの一部を変更したにもかかわらず、挿入する必要があることを認識できません。SponsorCourse の他の値を変更すると、Hibernate はオブジェクトをダーティと認識し、新しい行を挿入します。

私の別のアプローチは、まったく新しい SponsorCourse オブジェクトを作成し、それらを永続化することです。主キーが複合主キーではない他の子テーブルでは、行をフェッチし、主キーを変更し、Hibernate がダーティ オブジェクトに基づいて新しい行を挿入できるように見えるため、混乱しています。主キー。

Hibernate ドキュメント、特に Hibernate 3.0 リファレンスの第 8.4 章 (複合 ID) と第 10 章 (オブジェクトの変更についての議論) は、私が理解するのに十分ではありませんでした。

Hibernate によってフェッチされたオブジェクトの主キーを変更できると考えて、新しい行が挿入されると考えて、何か問題があると予想していますか? そのような状況では、常に独自の新しいオブジェクトを作成する必要がありますか? それとも、複合 ID である主キーの一部を変更して挿入を強制しようとすることに固有の問題ですか?

ありがとうございました。おそらく明らかに、私はフレームワークに不慣れです。

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

nhibernate - NHibernateは複合キーで冗長クエリを発行します

例として、私の国の収益サービスのデータベースの「人」エンティティをモデル化する必要があり、私の非常に小さな国では、人の名前と名前で一意に識別できるとしましょう。人。さらに、歳入サービスのデータベースは代理キーを使用せず、それに代理キーを追加すると、今後10年間は​​国のGDPがゼロになります。

Personsテーブルには3つのフィールドがあります。

  • ファーストネーム
  • 苗字
  • 現住所

そして、私の国のサイズを考えると、テーブルには< FirstNameLastName >列のペアに一意の制約があります。

このスキーマを考えると、私の非常に単純なPersonクラスには次のメンバーがあります。

  • KeyPersonKeyクラスのインスタンス。これには、FirstNameメンバーとLastNameメンバーがあり、もちろんEquals()GetHashCode( )を実装します。
  • CurrentAddress:単純な文字列。

NHibernateマッピングは次のようになります。

これまでのところ、このマッピングは正常に機能しており、DBからPersonエンティティを問題なくロードできます。

ただし、内部を見ると、セット全体をロードすると、NHibernateは次のことを実行することがわかります。

  1. レコードセットを開いて、 Personsテーブルから主要なプロパティのみ(つまり、FirstNameフィールドとLastNameフィールドのみ)をロードします。
  2. Personsからロードされた< FirstNameLastName >のペアごとに、SELECTを発行して(もちろんPersonsに対しても)、そのFirstNameLastNameを持つ人のCurrentAddressをロードします。

つまり、NHibernateは最初にキーをロードし、次に一連のSELECTを発行して、WHERE句でキーを提供する各Personを個別にロードします。

データベースへの書き込みに興味がない場合、単一のレコードセットを使用してテーブルからキープロパティと非キープロパティの両方を取得できることをNHibernateに伝える方法はありますか?

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

nhibernate - 流暢な Nhibernate で CompositeID の一部としてインターフェイスを使用する方法

複合キーを使用しているときにインターフェイスをマップする方法がわかりません。

私がやろうとしているのはこれです:

References は問題なく動作しますが、KeyReference を動作させることができず、References のように使用できる ".Class" がないようです。

私は読む:

Fluent NHibernate、インターフェースの操作

Fluent NHibernate でマッピングしながらインターフェイスにプログラミングする

これで参照の問題を修正できましたが、KeyReference の回避策は見つかりませんでした。私が見逃している明らかなものはありますか?私はしばらくの間グーグルで検索してきましたが、これまでのところ何も見つかりませんでした.