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
我有一个基础 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