27

Hibernateを使用して、IDにマッピングしている列の1つがnull値を持つことができる複合IDを作成できますか?

これは、null値を持つことができるが、主キーを持たない一意のキーを持つレガシーテーブルを処理するためのものです。

テーブルに新しい主キー列を追加するだけでよいことに気付きましたが、これを回避する方法があるかどうか疑問に思っています。

4

6 に答える 6

13

いいえ。主キーを null にすることはできません。

于 2008-09-16T10:12:18.270 に答える
6

エラーは発生しませんが、Hibernate は複合列の NULL 値を持つ行をエンティティにマップできません。これは、結果として NULL 値を持つエンティティを取得することを意味します。

于 2016-04-15T07:06:22.050 に答える
5

残念ながら、いいえ。回避策を使用する必要がありました:

行を正確に2つの列(A、B)で識別できるビュー(テーブルではありません)に複合IDを使用しました。ただし、列の 1 つ (B) には、正の整数だけでなく null 値も含まれる場合があります。したがって、私の回避策は、ビューに新しい列「BKey」を作成することです。ビューは、B が null の場合、BKey の値が -1、そうでない場合は BKey = B のように記述されます (B と null には正の整数のみが発生します)。また、B の代わりに BKey を使用するように複合 ID の実装を変更しました。

于 2017-02-15T11:17:04.790 に答える
0

これはお勧めできません。代わりにビューとマップを使用できますか? レガシーデータで立ち往生している場合は、 COALESCE を使用してデフォルトを提供できます。複合キーには多くの問題がありましたが、null 値はさらに多くの問題を引き起こすと思います。

于 2008-09-16T10:12:21.173 に答える
0

複合キーの場合 (データベースが PK で null を許可すると仮定)、null を含む最大 number_of_cols^2 - 1 エントリを持つことができます (たとえば、2 列の複合キーの場合、主キー null を持つ 3 つの行を持つことができます。4 番目はnull のない PK)。

于 2008-09-16T10:16:47.870 に答える
-1

なぜそれをしたいのですか?複合 ID はテーブルの主キーをマップする必要があり、キーに null 値を入れるのは賢明ではありませんね。

編集: Hibernate では許可されていません。プロパティをキーの外に置き、DAO を少し調整して、必要に応じてフィールドを考慮に入れることができます。

于 2008-09-16T10:10:57.587 に答える