EmbeddedId アノテーションによって参照されている場合は、組み込み可能クラスには Id アノテーションを付けられない

Java Persistence API (JPA) 仕様により、EmbeddedId アノテーションが付けられた属性をエンティティーが定義する場合、Id アノテーションが付けられた属性を組み込み可能クラスに含めることができません。EmbeddedId アノテーションと Id アノテーションの両方が定義されている場合、OpenJPA は Id アノテーションを無視するのに対し、EclipseLink は例外をスローします。

このルールは、 Id アノテーションを持つ属性を含む埋め込み可能クラスを検出し、 EmbeddedId アノテーションを使用して埋め込み可能クラスを参照するエンティティが見つかったかどうかに応じて、 Id アノテーションにフラグを設定します。

以下の例では、この規則は EmbeddableObject クラスの Id アノテーションにフラグを立てます。

   import javax.persistence.EmbeddedId; import javax.persistence.Entity; @Entity public クラス MainEntity {

      @EmbeddedId プライベート EmbeddableObject eo;}
   import javax.persistence.Embeddable; import javax.persistence.Id; @Embeddable パブリック・クラス EmbeddableObject {

      @Id private int フィールド;

      ...}

この問題を解決するには、 @Id アノテーションとそのインポートを削除する。

   import javax.persistence.Embeddable; import javax.persistence.Id;

   @Entity public クラス MainEntity {

      @EmbeddedId プライベート EmbeddableObject eo;}
   import javax.persistence.Embeddable; @Embeddable public class EmbeddableObject { private int フィールド;

      ...}

この問題や、OpenJPA から EclipseLink へのマイグレーションに関するその他の問題については、 OpenJPA to EclipseLink JPA Migration: Mappings ガイドを参照してください。