Java 子类能否具有与超类相同的列名?
我已经使用继承映射创建了数据库表。我希望所有表都有审核列 代码如下:Java 子类能否具有与超类相同的列名?,java,hibernate,jpa,Java,Hibernate,Jpa,我已经使用继承映射创建了数据库表。我希望所有表都有审核列 代码如下: 抽象的可审核类 个人类别: 学生班: 和职员班: 我的问题是,只生成了人员表的在创建的和学生表的在创建的和由创建的为空 是否有可能让员工和学生表的在和创建的也生成?您遇到问题的原因是因为这是一个一对一的关联,而不是继承 这种映射将不起作用,因为当您使用继承时,您将声明一个学生是一个人,因此,创建学生的那一刻就是创建人的那一刻。因此,没有理由在表中复制这两列 而且,您使用的是InheritanceType.JO
- 抽象的可审核类
- 个人类别:
- 学生班:
- 和职员班:
人员
表的在
创建的和学生
表的在
创建的和由
创建的为空
是否有可能让员工
和学生
表的
在
和
创建的也生成?您遇到问题的原因是因为这是一个一对一的关联,而不是继承
这种映射将不起作用,因为当您使用继承时,您将声明一个学生
是一个人
,因此,创建学生的那一刻就是创建人的那一刻。因此,没有理由在表中复制这两列
而且,您使用的是InheritanceType.JOINED
,基本上要求不在表之间共享公共列
这种映射有意义的唯一方法是,如果这些列表示不同的
创造时代。例如,当一个人出生时,当他成为一名学生时。
如果是这种情况,您可以使用以下映射:
@Entity
@PrimaryKeyJoinColumn(name = "person_id")
public static class Student extends Person {
int grade;
@Column(name = "createdAt")
LocalDateTime studentCreatedAt;
@Column(name = "createdBy")
String studentCreatedBy;
}
@Entity
@PrimaryKeyJoinColumn(name = "person_id")
public static class Staff extends Person {
int salary;
@Column(name = "createdAt")
LocalDateTime staffCreatedAt;
@Column(name = "createdBy")
String staffCreatedBy;
}
@Entity
public class Person extends Auditable {
@Id
Long id;
String name;
}
@Entity
public class Student extends Auditable {
@Id
Long id;
int grade;
@MapsId
@OneToOne
Person person;
}
@Entity
public class Staff extends Auditable {
@Id
Long id;
int salary;
@MapsId
@OneToOne
Person person;
}
如果不是这种情况,则Person
不是Student
和Staff
的超类,您可以使用此映射表示您的数据库:
@Entity
@PrimaryKeyJoinColumn(name = "person_id")
public static class Student extends Person {
int grade;
@Column(name = "createdAt")
LocalDateTime studentCreatedAt;
@Column(name = "createdBy")
String studentCreatedBy;
}
@Entity
@PrimaryKeyJoinColumn(name = "person_id")
public static class Staff extends Person {
int salary;
@Column(name = "createdAt")
LocalDateTime staffCreatedAt;
@Column(name = "createdBy")
String staffCreatedBy;
}
@Entity
public class Person extends Auditable {
@Id
Long id;
String name;
}
@Entity
public class Student extends Auditable {
@Id
Long id;
int grade;
@MapsId
@OneToOne
Person person;
}
@Entity
public class Staff extends Auditable {
@Id
Long id;
int salary;
@MapsId
@OneToOne
Person person;
}
其中@MapsId
告诉Hibernate ORM,列person\u id
也是该表的键。因此,您不需要@PrimaryKeyJoinColumn(name=“person\u id”)
如何将@heritance(strategy=heritancetype.JOINED)
放入可审核的?从学生中删除@heritance(并阅读)
@Entity
@PrimaryKeyJoinColumn(name = "person_id")
public static class Student extends Person {
int grade;
@Column(name = "createdAt")
LocalDateTime studentCreatedAt;
@Column(name = "createdBy")
String studentCreatedBy;
}
@Entity
@PrimaryKeyJoinColumn(name = "person_id")
public static class Staff extends Person {
int salary;
@Column(name = "createdAt")
LocalDateTime staffCreatedAt;
@Column(name = "createdBy")
String staffCreatedBy;
}
@Entity
public class Person extends Auditable {
@Id
Long id;
String name;
}
@Entity
public class Student extends Auditable {
@Id
Long id;
int grade;
@MapsId
@OneToOne
Person person;
}
@Entity
public class Staff extends Auditable {
@Id
Long id;
int salary;
@MapsId
@OneToOne
Person person;
}