在基类中使用如下注解:
@MappedSuperclass
public class BaseA implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "id")
private int id;
@Column(name="type")
private String type;
}
子类中使用如下:
@Entity
@Table(name="example")
public class ChildB extends BaseA
{
private static final long serialVersionUID = 1L;
@Column(name="name")
private String name;
}
这里hibernate会将两个类进行聚合 去创建 新的表
但是需要注意的是 这时候 如果你在子类中 重新定义了一个type的话
你对该type的注解声明是有效的,例如 你在childB中重新甚明了一个变量type的话 ,并且设置一致的情况下,
那么你是能够 将两个注解声明同时生效到一个字段中的
如果想这样做的话,
<pre name="code" class="javascript">@Entity
@Table(name="example")
public class ChildB extends BaseA
{
private static final long serialVersionUID = 1L;
@Id
@Column(name="type")
private String type;
@Column(name="name")
private String name;
}
但这样做是可以的,你对当前的type的设置是会生效的,
但是要注意,不能复写基类中的get函数
在使用ChildB去写入数据库的的时候,会出现 多一个param的错误的