当前位置:  开发笔记 > 编程语言 > 正文

从@EmbeddedId类中提取超类时,实体没有持久的id属性

如何解决《从@EmbeddedId类中提取超类时,实体没有持久的id属性》经验,为你挑选了1个好方法。

我在Spring Data JPA中使用Spring Boot 1.3.我想使用主键的专用对象来生成早期主键(如实现域驱动设计中所建议的那样).

假设这个实体:

@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类创建一个超类,如:

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

为什么这突然不再起作用了?



1> Predrag Mari..:

@MappedSuperclassEntityUuidId类,这样,其属性将被视为永久.

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有