Java Persistence API (JPA) 仕様により、EmbeddedId アノテーションが付けられた属性をエンティティーが定義する場合、Id アノテーションが付けられた属性を組み込み可能クラスに含めることができません。EmbeddedId アノテーションと Id アノテーションの両方が定義されている場合、OpenJPA は Id アノテーションを無視するのに対し、EclipseLink は例外をスローします。
このルールは、 Id アノテーションを持つ属性を含む埋め込み可能クラスを検出し、 EmbeddedId アノテーションを使用して埋め込み可能クラスを参照するエンティティが見つかったかどうかに応じて、 Id アノテーションにフラグを設定します。
EmbeddedId アノテーションが、Id アノテーションを持つ組み込み可能クラスを参照している場合、この規則はその Id アノテーションに深刻な問題というフラグを立てます。 Id アノテーション を削除する必要がある。
EmbeddedId アノテーションを使用するエンティティーからの参照が見つからない場合、規則はこの問題に警告のフラグを立てます。 組み込み可能クラスを参照している可能性のある EmbeddedId アノテーションが付けられた属性を含むように分析の有効範囲を拡張してスキャンを再実行するか、組み込み可能クラスを参照する EmbeddedId アノテーションがないことを手動で検証することができます。
以下の例では、この規則は 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 ガイドを参照してください。