嵌入式类在由 EmbeddedId 注释引用时不能具有 Id 注释

根据 Java 持久性 API (JPA) 规范,如果实体通过 EmbeddedId 注释定义属性,那么嵌入式类不能包含带有 Id 注释的属性。如果定义了 EmbeddedIdId 注释,那么 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 指南。