我有以下两个Hiberante
实体:
Person
Animal
它们有共享的字段/列,例如:name, age
等,但每个主键id字段的名称不同,例如有person_id
和animal_id
@Entity
@Table(name = "person")
@JsonIgnoreProperties(ignoreUnknown = true)
public class Person{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@JsonProperty
@Column(name = "person_id")
private Integer person_id;
// all below fields are generic in all the entities
@JsonProperty
@Column(name = "name")
private String name;
@JsonProperty
@Column(name = "age")
private String age;
}
有没有一种方法可以创建一个包含这些通用name, age
等字段的基本实体超类,然后让Person、Animal和任何新实体扩展这个超实体?
请注意,超级类没有自己的表,所以我不确定@Table
值会是什么?
我还遇到了主键没有全部命名的问题,例如id
,因此必须在每个实体中具体指定它们。
如果您不想在数据库中为此添加表"超级实体";(我们称之为类Being
(,您仍然可以使Person
和Animal
从中继承(Person
应该从Animal
BTW继承(,并对属性上的公共字段进行映射:
public abstract class Being {
private Integer id;
private String name;
// ...
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//...
}
@Entity
@Table(name = "person")
@JsonIgnoreProperties(ignoreUnknown = true)
public class Person extends Being {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@JsonProperty
@Column(name = "person_id")
public Integer getId() {
return super.getId();
}
public void setId(Integer id) {
super.setId(id);
}
// all below fields are generic in all the entities
@JsonProperty
@Column(name = "name")
public String getName() {
return super.getName();
}
public void setName(String name) {
super.setName(name);
}
//...
}