我正在使用 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/