Hibernate-在没有基表注释的情况下扩展实体



我有以下两个Hiberante实体:

Person
Animal 

它们有共享的字段/列,例如:name, age等,但每个主键id字段的名称不同,例如有person_idanimal_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(,您仍然可以使PersonAnimal从中继承(Person应该从AnimalBTW继承(,并对属性上的公共字段进行映射:

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);
}
//...
}

最新更新