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

Hibernate - Extending Entities without a base table annotation?

我有以下 2 个 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 等字段的基本实体超级 class,然后让 Person、Animal 和任何新实体扩展这个超级实体?

请注意,超级 class 没有自己的 table,所以我不确定 @Table 的值是多少?

我还遇到主键未全部命名的问题,例如id 因此必须在每个实体中专门指定它们。

如果您不想在数据库中为这个“超级实体”添加 table(我们称其为 class Being),您仍然可以创建 PersonAnimal 继承自它(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);
    }

    //...

}