4

Hibernate と複合キーに問題があり、その列の 1 つが自動インクリメントされていることがわかりました。

私は MySQL と、GID と LANG の 2 つの列で構成される主キーを使用しています。GID 列は AUTO_INCREMENT として設定されます。挿入は機能しており、hibernate は新しい行を挿入し、GID が null の場合、MySQL は auto_generated id を追加します。ただし、Hibernate は永続化するために指定されたオブジェクトに GID フィールドを設定しません。

休止状態で複合主キーを使用することに一般的に関連する問題について聞いたことがあります。これは休止状態のバグなのか、それとも開発者による計画で残されたアンチ機能なのかを尋ねています (実装されないため実装されません)。

4

2 に答える 2

5

3.5.6-FinalのHibernate Annotations Reference Guide (セクション 2.2.3.2.4. 部分的な識別子の生成) では、複合 ID の一部にシーケンスを使用できると述べています。

2.2.3.2.4. 部分的な識別子の生成

Hibernate は、いくつかの識別子プロパティの自動生成をサポートしています。1 つまたは複数の id プロパティで @GeneratedValue アノテーションを使用するだけです。

警告: Hibernate チームは、このような構造は根本的に間違っていると常に感じてきました。この機能を使用する前に、データ モデルを修正してください。

(ドキュメントに例があります!)

しかし、パルテノンも正しいです。同じバージョンのHibernate Reference Guid (セクション 8.4. 複合識別子としてのコンポーネント) では、(xml の場合) それは不可能であると述べられています。

IdentifierGenerator を使用して複合キーを生成することはできません。代わりに、アプリケーションは独自の識別子を割り当てる必要があります。

Annotation と XML マッピングに違いがあるかどうかはわかりません。

<irony>冬眠がますます好きになりました。</irony>

于 2011-02-15T13:13:28.110 に答える
1

バグではありません。ドキュメントでわかるように、これは望ましい動作です。

IdentifierGenerator を使用して複合キーを生成することはできません。代わりに、アプリケーションは独自の識別子を割り当てる必要があります。

http://docs.jboss.org/hibernate/stable/core/reference/en/html/components.html#components-compositeid

于 2011-02-15T13:06:21.597 に答える