Hibernate 注释以排除基 class 中的字段

Hibernate annotations to exclude fields in base class

我有一个基础 class,其中包含四个字段 a、b、c 和 d 以及两个扩展它的子 classes。

我正在努力确保 SubOne 不会保留字段 d 并且 SubTwo 不会保留字段 c。

下面的 xml 映射完美无缺。

这可以使用注释吗?

(休眠 v3.2.4,JPA 1.0)

public class Base {
    private String a;
    private String b;
    private String c;
    private String d;   
}

public class SubOne extends Base {
    private int id;
}

public class SubTwo extends Base {
    private int id;
    private String e;
}

映射:

<class name="SubOne" table="SubOne">
    <id name="id" column="Id">
        <generator class="identity"/>
    </id>
    <property name="a" column="a" />
    <property name="b" column="b" />
    <property name="c" column="c" />
</class>

<class name="SubTwo" table="SubTwo">
    <id name="id" column="Id">
        <generator class="identity"/>
    </id>
    <property name="a" column="a" />
    <property name="b" column="b" />
    <property name="d" column="d" />
    <property name="e" column="e" />
</class>

亚一Class:

@Entity
@Table(name="SubOne")
public class SubOne extends Base implements Serializable {       

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

@Override
public String getA() {
    return super.getA();
}

@Override
public String getB() {
    return super.getB();
}

@Override
public String getC() {
    return super.getC();
}

}

是的,你可以做到,但以一种尴尬的方式:

覆盖 getter 方法:

  • 在 SubOne 中获取 D
  • getC 是 SubTwo

将这两个方法注释为@Transient