gpt4 book ai didi

java - 为什么我会获得与 JPA 共享的 Id?

转载 作者:行者123 更新时间:2023-12-01 10:15:28 26 4
gpt4 key购买 nike

我有一个关于 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com