jpa中的java继承:如何用相同的id插入

pnwntuvh  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(255)

我有一个基类person和3个继承自person的类。以下是一些简短的片段:

@Entity
public class Person extends Model{

    // ATTRIBUTES
    @Id
    @Column(columnDefinition = "integer")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    @Column(columnDefinition = "varchar(20) not null")
    protected String firstName;
    @Column(columnDefinition = "varchar(20) not null")
    protected String lastName;
    @Column(columnDefinition = "varchar(20) not null")
    protected String password;
    @Column(columnDefinition = "varchar(50) not null")
    protected String eMail;

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Boss extends Person {

    // ATTRIBUTES
    @Column(insertable = false, updatable = false)
    private String dtype;
    @OneToMany(mappedBy = "boss")
    private List<Employee> listEmployee;

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Employee extends Person {

    // ATTRIBUTES
    @Column(insertable = false, updatable = false)
    private String dtype;
    @Column(columnDefinition = "Varchar(20)")
    private String position;
    @ManyToOne
    private Boss boss;

现在我想存储一个员工,一个老板,然后再存储一个员工:

Employee e1 = new Employee(...);
Person p1 = new Person(e1);
Boss b = new Boss(...);
Person p2 = new Person(b);
Employee e2 = new Employee(...);
Person p3 = new Person(e2);
e1.save();
p1.save();
b.save();
p2.save();
e2.save();
p3.save();

这将在id为1和2的employee中生成2个条目,在id为1的boss中生成1个条目,在id为1、2和3的person中生成3个条目。e1的员工id为1,本人id为1,老板id为1,本人id为2,e2的员工id为2,本人id为3。
有没有可能在我的程序中不使用全局计数器而在employee和person中插入一个id相同的雇员?
谢谢您
派崔克

6uxekuva

6uxekuva1#

您不需要创建和持久化person示例—实际上person应该是一个抽象类。给定正确的Map(您目前没有),您只需要以下内容:

Employee e1 = new Employee(...);
Boss b = new Boss(...);
Employee e2 = new Employee(...);

e1.save();
b.save();
e2.save();

在Map中删除 @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) 窗体boss和employee并将其添加到person类。
此外,您不需要为每个类的表\u设置一个discrimator,因此您可以从老板和员工中删除以下内容:

@Column(insertable = false, updatable = false) private String dtype;

相关问题