Java Persistence API (JPA) 仕様により、EmbeddedId アノテーションが付けられた属性をエンティティーが定義する場合、Id アノテーションが付けられた属性を組み込み可能クラスに含めることができません。EmbeddedId アノテーションと Id アノテーションの両方が定義されている場合、OpenJPA は Id アノテーションを無視するのに対し、EclipseLink は例外をスローします。
この規則は、Id アノテーションが付けられた属性を含む Embeddable クラスをスキャンし、その後、EmbeddedId アノテーションを使用して組み込み可能クラスを参照するエンティティーが見つかるかどうかによって、Id アノテーションにフラグを立てます。
EmbeddedId アノテーションが、Id アノテーションを持つ組み込み可能クラスを参照している場合、この規則はその Id アノテーションに深刻な問題というフラグを立てます。クイック・フィックスを使用してこの Id アノテーションを削除することができます。
EmbeddedId アノテーションを使用するエンティティーからの参照が見つからない場合、規則はこの問題に警告のフラグを立てます。 組み込み可能クラスを参照している可能性のある EmbeddedId アノテーションが付けられた属性を含むように分析の有効範囲を拡張してスキャンを再実行するか、組み込み可能クラスを参照する EmbeddedId アノテーションがないことを手動で検証することができます。
以下の例では、この規則は EmbeddableObject クラスの Id アノテーションにフラグを立てます。
import javax.persistence.EmbeddedId; import javax.persistence.Entity; @Entity public class MainEntity { @EmbeddedId private EmbeddableObject eo; } |
import javax.persistence.Embeddable; import javax.persistence.Id; @Embeddable public class EmbeddableObject { @Id private int field; ... } |
この問題を解決するため、クイック・フィックスは @Id アノテーションとその import を削除します。
import javax.persistence.Embeddable; import javax.persistence.Id; @Entity public class MainEntity { @EmbeddedId private EmbeddableObject eo; } |
import javax.persistence.Embeddable; @Embeddable public class EmbeddableObject { private int field; ... } |
この問題や、OpenJPA から EclipseLink へのマイグレーションに関するその他の問題については、 OpenJPA to EclipseLink JPA Migration: Mappings ガイドを参照してください。