可內嵌類別由 EmbeddedId 註釋參照時,不能有 Id 註釋

根據「Java 持續性 API (JPA)」規格,如果實體定義的屬性具有 EmbeddedId 註釋,則可內嵌類別不能包含具有 Id 註釋的屬性。如果同時定義了 EmbeddedId 註釋和 Id 註釋,OpenJPA 會忽略 Id 註釋,而 EclipseLink 則會擲出異常狀況。

此規則會偵測包含具有 Id 註解的屬性的可嵌入類,然後根據是否找到使用 EmbeddedId 註解引用可嵌入類別的實體來標記 Id 註解。

在本例中,規則會標示 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 公用類別 EmbeddableObject {

      @Id private int 欄位;

      ...}

若要解決問題,請移除 @Id 註解及其匯入

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

   @Entity public 類別 MainEntity {

      @EmbeddedId private EmbeddableObject eo;}
   import javax.persistence.Embeddable; @Embeddable public class EmbeddableObject { private int field;

      ...}

如需此問題以及其他 OpenJPA 至 EclipseLink 移轉問題的相關資訊,請參閱 OpenJPA 至 EclipseLink JPA 移轉:對映手冊。