java - 从 @EmbeddedId 类中提取父类(super class)时,实体没有持久性 id 属性

标签 java spring hibernate jpa

我正在使用 Spring Boot 1.3 和 Spring Data JPA。我想使用主键的专用对象来使用早期主键生成(如 Implementing Domain Driven Design 中所建议)。

假设这个实体:

@Entity
public class Book {
  @EmbeddedId
  private BookId id;
}

和这个值对象:

@Embeddable
public class BookId implements Serializable {

  private UUID id;

  protected BookId(){} //for hibernate

  public BookId( UUID id ) {
    this.id = id;
  }

  public UUID getId() {
    return id;
  }
}

然后就可以正常工作了。但是,我想为所有 id 类创建一个父类(super class),例如:

public class EntityUuidId implements Serializable {

  private UUID id;

  protected EntityUuidId(){} //for hibernate

  public EntityUuidId( UUID id ) {
    this.id = id;
  }

  public UUID getId() {
    return id;
  }
}

现在 BookId 类更改为:

@Embeddable
public class BookId extends EntityUuidId {

  protected BookId(){} //for hibernate

  public BookId( UUID id ) {
    super(id);
  }
}

现在的问题是当我运行我的应用程序时出现以下异常:

org.hibernate.AnnotationException: BookId has no persistent id property: Book.id

为什么突然就不行了?

最佳答案

@MappedSuperclass 放在 EntityUuidId 类上,这样它的属性将被视为持久的。

关于java - 从 @EmbeddedId 类中提取父类(super class)时,实体没有持久性 id 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34310101/

相关文章:

java - java中输入语句的比较

java - Rhino:如何将字符串从 Java 返回到 Javascript?

java - JPA Hibernate HSQLDB - VARBINARY() 字段和尝试选择时出错

spring - 没有这样的属性 : springSecurityService for class: DUMMY

java - Struts 2 中的文件下载

java - Session Factory bean 创建和注入(inject)时出现 NoSuchElementException

java - 如何让 IntelliJ 为非基于 ruby​​ 的项目加载我的 .rvmrc?

java - 仅允许 JavaFX 节点的视觉溢出

spring - 在多个应用程序上进行SSO和REST Api身份验证

java - 多核对5ms处理页面的影响