嵌入式类在由 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 公用 类 MainEntity {

      @EmbeddedId private EmbeddableObject eo;}
   import javax.persistence.Embeddable; import javax.persistence.Id; @Embedable public class EmbeddableObject {

      @Id private int 字段;

      ...}

要解决这个问题,请删除 @Id 注解及其导入。

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

   @Entity 公用 类 MainEntity {

      @EmbeddedId private EmbeddableObject eo;}
   import javax.persistence.Embeddable; @Embedable 公用类 EmbeddableObject { private int 字段;

      ...}

有关此问题和其他 OpenJPA 到 EclipseLink 迁移问题的信息,请参阅 OpenJPA to EclipseLink JPA Migration: Mappings 指南。