用于java扩展类的Hibernate注释映射

und*_*dog 3 java hibernate jpa hibernate-mapping java-ee

我正在开发一个Spring Hibernate项目,我有三个类 BaseEntity,Person&Owner.

Person延伸BaseEntity,Owner延伸Person.

BaseEntity.java

public class BaseEntity {

    private Integer id;

        Getters & Setters 
Run Code Online (Sandbox Code Playgroud)

Person.java

public class Person extends BaseEntity {

    private String firstName;

    private String lastName;

       Getters & Setters 
Run Code Online (Sandbox Code Playgroud)

Owner.java

@Entity
@Table(name="OWNERS")
public class Owner extends Person {

    @Column(name="ADDRESS")
    private String address;

    @Column(name="CITY")
    private String city;

    @Column(name="TELEPHONE")
    private String telephone;

    Getter and Setters
Run Code Online (Sandbox Code Playgroud)

现在我想在一个表中映射三个类的所有属性Owner.任何人都可以帮我,我该如何映射?

我有一个基于xml的映射,我希望在注释中执行此操作

<class name="org.springframework.samples.petclinic.Owner" table="owners">
        <id name="id" column="id">
            <generator class="identity"/>
        </id>
        <property name="firstName" column="first_name"/>
        <property name="lastName" column="last_name"/>
        <property name="address" column="address"/>
        <property name="city" column="city"/>
        <property name="telephone" column="telephone"/>
    </class>
Run Code Online (Sandbox Code Playgroud)

我想过使用每个类的继承映射表,但是在xml中我看到没有使用的是鉴别器列.

Mar*_*szS 11

具体类作为映射的超类

使用@MappedSuperclass注释.

JPA(...)定义了通过@MappedSuperclass注释或元素定义的映射超类概念.映射的超类不是持久类,但允许为其子类定义公共映射.

更多:Java持久性/继承

@MappedSuperclass
public class BaseEntity {
    ...
}

@MappedSuperclass
public class Person extends BaseEntity {
   ...
}

@Entity
@Table(name="OWNERS")
public class Owner extends Person {
    ...
}
Run Code Online (Sandbox Code Playgroud)

另请看这个问题:Hibernate:如何覆盖映射超类中的属性