Hibernate - 在没有基础 table 注释的情况下扩展实体?
Hibernate - Extending Entities without a base table annotation?
我有以下 2 个 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
等字段的基本实体超级 class,然后让 Person、Animal 和任何新实体扩展这个超级实体?
请注意,超级 class 没有自己的 table,所以我不确定 @Table
的值是多少?
我还遇到主键未全部命名的问题,例如id
因此必须在每个实体中专门指定它们。
如果您不想在数据库中为这个“超级实体”添加 table(我们称其为 class 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);
}
//...
}
我有以下 2 个 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
等字段的基本实体超级 class,然后让 Person、Animal 和任何新实体扩展这个超级实体?
请注意,超级 class 没有自己的 table,所以我不确定 @Table
的值是多少?
我还遇到主键未全部命名的问题,例如id
因此必须在每个实体中专门指定它们。
如果您不想在数据库中为这个“超级实体”添加 table(我们称其为 class 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);
}
//...
}