問題タブ [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 投票する
1 に答える
1076 参照

nhibernate - NHibernate 3.3: key-property が生成された複合 ID?

このマッピングは NHibernate 3.3 では不可能であると読みました:

基本的に、NH によって自動的に計算されるコンポジット ID のプロパティが必要です。

たぶん、似たようなものを得るテクニックが存在しますか?

前もって感謝します。

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

c# - AutoInc を使用した FluentMapping ComposedId

会社のアプリケーション用のデータ転送ツールを作成して、古いバージョンから新しいバージョンにデータを移動し、元に戻します。今は NHibernate と FluentMapping を使用しているため、古いテーブルをすべてマップする必要がありますが、構成された主キーを持つ 1 つのテーブルに問題があります。テーブルは次のようになります。

そして、上記のすべてのフィールドを複合キーとしてマップする必要があります。唯一の問題は、「シーケンス」が他のフィールドに基づいて増加し、キーの重複を回避することです。他のフィールドは外部キーと単純な文字列が混在しています。このマッピングを行う方法はありますか? Sequence を計算するために式を作成する必要がある場合は、問題ありません。

幸いなことに、新しいシステムのテーブルは整数 ID のみを使用します。

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

java - 複合 ID での Session.get() の奇妙な動作を回避するには?

マップされた複合識別子なしで複合 ID を宣言するオブジェクトのセッションで get を実行しようとしています。
使用される Hibernate のバージョンは 3.5.5 です。

コードのフェッチは一般的であり、実際のデータをラップするコンテナー オブジェクトを読み取ります。

コードは実際のマッピングについて何も知らないため、ID に関するメタデータを参照する必要があります。

マッピングが次のように定義されている場合:

複合識別子クラスがない場合、id はオブジェクト自体と等しく、ラッパー参照と等しくなります。
データベースからオブジェクトをフェッチする代わりに session.get() を実行すると、id で渡されたのと同じオブジェクトが返されます (等しいオブジェクトではなく、オブジェクトの同じインスタンス)。
Upd:実際、session.get() はin、id オブジェクトが渡したデータベースからオブジェクトをロードし、それを返します。最初は読み込みをスキップすると思っていました。

これまでに見つけた解決策は、マップされた複合識別子を導入し、マッピングを次のように変更することです。

SurrogateKey は、必要に応じて 2 つのフィールドと equals/hashcode を持つオブジェクトとして定義されます。
この変更により、metadata.getIdentifier() によって返される id は SurrogateKey のインスタンスであり、session.get() はデータベースからオブジェクトをフェッチします (存在する場合)。

マッピング修正の問題は、基準と HQL のプロパティ名が識別子からid.identifierに変更され、実際には多くの既存のコードが壊れていることです。

私が現在調査していることは次のとおりです。

  1. Id クラスを宣言せずに session.get() を機能させる方法はありますか?
  2. 別の方法として、id を追加せずに、以前と同じようにプロパティを扱うように hibernate に指示することもできます。彼らの前では?
  3. hibernate を v4 にアップグレードしますか (依存プロジェクトと承認プロセスのために簡単ではありません)?
  4. 他に利用可能なオプション/回避策はありますか?

これまでのところ、上記の解決策しかできていませんが、邪魔にならないものを探しており、手がかり、提案、関連ドキュメントへのポインタをいただければ幸いです。

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

java - 他の複合 ID の一部としての複合 ID を休止状態にする

テーブルへのマッピングを書き込もうとしています。id と versionId - テーブル テストの複合 ID を決定しました。しかし、テーブル test_question には、question_id、test_id、および versionId から構成される複合 ID があります。1 つの複合 ID id-versionId を他の複合 ID の一部として使用できるため、理解できません。

スクリプトの次の平和があります。

そして私のマッピング

Test.hbm.xml

および TestQuestion.hbm.xml の場合

テーブル TestQuestion の id は何ですか? つまり、QUESTION_ID-TEST_ID-VERSION_ID は完全な複合 ID です。

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

hibernate - Hibernate - 複合 ID を使用してテーブルに参加する

Person テーブル ( PersonID) と Address テーブル ( AddressID) があります。リレーションシップを使用してPerson_Addresswhich mapsという名前の新しい結合テーブルを作成したいのですが、主キーを 2 つの主キーの構成として指定する必要があります ( )。Person->AdressManyToManyPersonID - AddressID

Hibernate HBM 構文を使用してそれを行うにはどうすればよいですか?

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

fluent-nhibernate - 流暢なnhibernateの1対多のマッピングで複合IDを使用するにはどうすればよいですか?

複合IDがエンティティを一意に識別するシナリオがあります。これらのフィールドに複数の主キーを持つようにMSSQLを定義しました。さらに、1対多の関係を参照するために自動インクリメントされたIDを使用したいと思います。スキーマは次のとおりです。

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

ここで、キャラクターにSaveOrUpdate()を使用し、更新に複合IDを使用したいと思います。これは、キャラクターの一意性が、リージョン、レルム、名前の3つのフィールドによって定義されるためです。ただし、CharProgressionからCharacterを参照する場合、char_progressionテーブルに文字を識別するための3つのフィールドを保持させたくないので、複合IDを使用したくありません。単純なIDで十分です...そのためです。また、CharacterエンティティにIDENTITYIDを定義しました。

私が試みていることは可能ですか?またはこれを達成する別の方法はありますか?

ありがとう :)

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

hibernate - 2行を結合する休止状態

Java コードを簡単にするために、データを使用するために 2 つの行が存在する必要があるため、2 つの行を 1 つに結合したいと考えています。

それらが私のテーブルのフィールドだとしましょう:

明らかに、ID は主キーです。FIELD1 と 2 により、DISCRIMINATOR と VALUE だけが異なる 2 行の「グループ」を識別できます (識別子は、値が何を表しているかを示します)。

そして、次のように、「グループ」ごとに 1 つの POJO が必要です (ここで、FIELD1 と 2 は複合 ID として使用されます)。

どこ :

VALUE1 = 識別子 A の値

VALUE2 = 識別子 B の値

SQL では、次のようにリクエストします。

残念ながら、休止状態にする方法がわかりません。現在、すべての可能性に混乱しています。

私はソリューションをマッピングされた XML として使用したいと考えていますが、選択の余地がない場合でも注釈ソリューションを使用します。

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

hibernate - Composite-id との関連付けのマッピング

私はHibernateを初めて使用します。このケースをどのように表現できるか疑問があります。

-->テーブル メッセージ: - (PK) MsgSender -> テーブル 'User' への外部キー - (PK) MsgDestination -> テーブル 'User' への外部キー - (PK) MsgDateSend - MsgContent - IsReaded

-->テーブル ユーザー -(PK) ユーザー名 - ...

これは私の Message.hbm です:

そして、これは私のPOJOです: クラスメッセージ:

クラス メッセージ ID:

この構造では、Hibernate は挿入、削除などを行いません... 誰かがこの問題を解決するのを手伝ってくれますか?

前もって感謝します。

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

c# - Fluent NHibernate CompositeId が null 値を挿入しようとしています

Fluent NHibernate を使用して既存のデータベースをマップしようとしていますが、複雑な多対多の関係 (追加の列) に関して問題が発生しました。

追加の列を持つ多対多の関係は、純粋な多対多の関係ではないため、HasManyマッピングする必要があることを知っています。HasManyToManyリンク テーブルは、それ自体のクラスとしてマップする必要があります。これは、以下の例で行っています。

このデータを既存のデータベースからロードすると、正常にロードされます。私が取り組んでいるプロジェクトは、このデータを取得して、問題が発生する空のデータベースに挿入します。新しいデータベースに挿入するときに、データベースで許可されていない値をCompositeId挿入しようとしていると思います。データベース構造を変更することは、現時点では実行可能なオプションではありません。この問題を回避する方法はありますか?NULLItemIDItemGroupID

ありがとう、以下のコード例。


エンティティ クラス

クラスのマッピング