問題タブ [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.
nhibernate - NHibernate 3.3: key-property が生成された複合 ID?
このマッピングは NHibernate 3.3 では不可能であると読みました:
基本的に、NH によって自動的に計算されるコンポジット ID のプロパティが必要です。
たぶん、似たようなものを得るテクニックが存在しますか?
前もって感謝します。
c# - AutoInc を使用した FluentMapping ComposedId
会社のアプリケーション用のデータ転送ツールを作成して、古いバージョンから新しいバージョンにデータを移動し、元に戻します。今は NHibernate と FluentMapping を使用しているため、古いテーブルをすべてマップする必要がありますが、構成された主キーを持つ 1 つのテーブルに問題があります。テーブルは次のようになります。
そして、上記のすべてのフィールドを複合キーとしてマップする必要があります。唯一の問題は、「シーケンス」が他のフィールドに基づいて増加し、キーの重複を回避することです。他のフィールドは外部キーと単純な文字列が混在しています。このマッピングを行う方法はありますか? Sequence を計算するために式を作成する必要がある場合は、問題ありません。
幸いなことに、新しいシステムのテーブルは整数 ID のみを使用します。
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に変更され、実際には多くの既存のコードが壊れていることです。
私が現在調査していることは次のとおりです。
- Id クラスを宣言せずに session.get() を機能させる方法はありますか?
- 別の方法として、id を追加せずに、以前と同じようにプロパティを扱うように hibernate に指示することもできます。彼らの前では?
- hibernate を v4 にアップグレードしますか (依存プロジェクトと承認プロセスのために簡単ではありません)?
- 他に利用可能なオプション/回避策はありますか?
これまでのところ、上記の解決策しかできていませんが、邪魔にならないものを探しており、手がかり、提案、関連ドキュメントへのポインタをいただければ幸いです。
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 です。
hibernate - Hibernate - 複合 ID を使用してテーブルに参加する
Person テーブル ( PersonID
) と Address テーブル ( AddressID
) があります。リレーションシップを使用してPerson_Address
which mapsという名前の新しい結合テーブルを作成したいのですが、主キーを 2 つの主キーの構成として指定する必要があります ( )。Person->Adress
ManyToMany
PersonID - AddressID
Hibernate HBM 構文を使用してそれを行うにはどうすればよいですか?
fluent-nhibernate - 流暢なnhibernateの1対多のマッピングで複合IDを使用するにはどうすればよいですか?
複合IDがエンティティを一意に識別するシナリオがあります。これらのフィールドに複数の主キーを持つようにMSSQLを定義しました。さらに、1対多の関係を参照するために自動インクリメントされたIDを使用したいと思います。スキーマは次のとおりです。
マッピングは次のようになります。
ここで、キャラクターにSaveOrUpdate()を使用し、更新に複合IDを使用したいと思います。これは、キャラクターの一意性が、リージョン、レルム、名前の3つのフィールドによって定義されるためです。ただし、CharProgressionからCharacterを参照する場合、char_progressionテーブルに文字を識別するための3つのフィールドを保持させたくないので、複合IDを使用したくありません。単純なIDで十分です...そのためです。また、CharacterエンティティにIDENTITYIDを定義しました。
私が試みていることは可能ですか?またはこれを達成する別の方法はありますか?
ありがとう :)
hibernate - 2行を結合する休止状態
Java コードを簡単にするために、データを使用するために 2 つの行が存在する必要があるため、2 つの行を 1 つに結合したいと考えています。
それらが私のテーブルのフィールドだとしましょう:
明らかに、ID は主キーです。FIELD1 と 2 により、DISCRIMINATOR と VALUE だけが異なる 2 行の「グループ」を識別できます (識別子は、値が何を表しているかを示します)。
そして、次のように、「グループ」ごとに 1 つの POJO が必要です (ここで、FIELD1 と 2 は複合 ID として使用されます)。
どこ :
VALUE1 = 識別子 A の値
VALUE2 = 識別子 B の値
SQL では、次のようにリクエストします。
残念ながら、休止状態にする方法がわかりません。現在、すべての可能性に混乱しています。
私はソリューションをマッピングされた XML として使用したいと考えていますが、選択の余地がない場合でも注釈ソリューションを使用します。
hibernate - Composite-id との関連付けのマッピング
私はHibernateを初めて使用します。このケースをどのように表現できるか疑問があります。
-->テーブル メッセージ: - (PK) MsgSender -> テーブル 'User' への外部キー - (PK) MsgDestination -> テーブル 'User' への外部キー - (PK) MsgDateSend - MsgContent - IsReaded
-->テーブル ユーザー -(PK) ユーザー名 - ...
これは私の Message.hbm です:
そして、これは私のPOJOです: クラスメッセージ:
クラス メッセージ ID:
この構造では、Hibernate は挿入、削除などを行いません... 誰かがこの問題を解決するのを手伝ってくれますか?
前もって感謝します。
c# - Fluent NHibernate CompositeId が null 値を挿入しようとしています
Fluent NHibernate を使用して既存のデータベースをマップしようとしていますが、複雑な多対多の関係 (追加の列) に関して問題が発生しました。
追加の列を持つ多対多の関係は、純粋な多対多の関係ではないため、HasMany
マッピングする必要があることを知っています。HasManyToMany
リンク テーブルは、それ自体のクラスとしてマップする必要があります。これは、以下の例で行っています。
このデータを既存のデータベースからロードすると、正常にロードされます。私が取り組んでいるプロジェクトは、このデータを取得して、問題が発生する空のデータベースに挿入します。新しいデータベースに挿入するときに、データベースで許可されていない値をCompositeId
挿入しようとしていると思います。データベース構造を変更することは、現時点では実行可能なオプションではありません。この問題を回避する方法はありますか?NULL
ItemID
ItemGroupID
ありがとう、以下のコード例。