作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个关于 JPA 和继承 (EclipseLink) 的问题:
对于一个学校项目,我创建了一个抽象类:HumanEntity以及实现它的不同子类。
抽象类:
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class HumanEntity implements IHuman{
@Id
@GeneratedValue
protected long id;
@Column(name = "FIRST_NAME")
protected String firstName;
@Column(name = "LAST_NAME")
protected String lastName;
protected LocalDate birthDate;
protected HumanEntity(){
}
@Override
public String getFirstName() {
return firstName;
}
@Override
public String getLastName() {
return lastName;
}
@Override
public LocalDate getBirthDate() {
return birthDate;
}
}
子类示例:
@Entity
@Table(name="ACTOR")
public class ActorEntity extends HumanEntity{
protected ActorEntity(){}
protected ActorEntity(ActorBuilder actorBuilder){
this.firstName = actorBuilder.getFirstName();
this.lastName = actorBuilder.getLastName();
this.birthDate = actorBuilder.getBirthDate();
}
}
当我运行项目时:-> Ids 为每个子类共享,然后我就拥有了
在类型转换中:1 -> ....3 -> ....
在导演表中:2 -> ....
如何为每个子类创建不同的 ID,但在代码中使用 protected (共享)的 ID?
另一个小问题 EclipseLink 或 JPA 总是创建一个序列表,但我不知道它的用途是什么?我可以删除它吗?
非常感谢!
最佳答案
HumanEntity
类型或子类的所有对象都是 HumanEntity
的实例,因此 id 需要一致,并且来自同一 id“组”。
你不能为 Actor
指定id 1 和为导演
指定id 1,因为它们都是HumanEntity
,并且您需要唯一标识一个HumanEntity
。即 Actor#1 也是 HumanEntity#1。所以你不能同时拥有 Director#1,因为它也是 HumanEntity#1!
如果您想要拥有类似的 id,那么您需要更改您的继承结构。
关于java - 为什么我会获得与 JPA 共享的 Id?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35927484/
我是一名优秀的程序员,十分优秀!