您将如何在以下示例代码中配置注释?我想只坚持使用 JPA 注释并避免 Hibernate 特定的依赖项。下面的代码正确吗?
@Entity
public class RefExample extends RefData {
}
(这些类将有多个版本,RefSomeOtherExample 等,每个类一个数据库表。有些可能会添加其他字段(列),但大多数只会使用从“RefData”基类继承的基本字段。)
基类:
@Entity
public abstract class RefData {
private long id;
private String code;
private String desc;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(unique = true, nullable = false)
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
@Column(unique = true, nullable = false, length=8)
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
@Column(unique = true, nullable = false, length=80)
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}
最终我想使用 Hibernate 的 SchemaExport 类生成模式创建脚本。在上面的情况下,这两个类应该只会创建一个名为“RefExample”的表,其中包含“RefData”中的三列。这行得通吗?
来自 JPA 1.0 规范:
抽象类和具体类都可以是实体。抽象类和具体类都可以使用 Entity 注解进行注解,映射为实体,并作为实体进行查询。
实体可以扩展非实体类,非实体类可以扩展实体类.
由于您想要一张表,因此应该使用单桌 http://en.wikibooks.org/wiki/Java_Persistence/Inheritance#Single_Table_Inheritance遗产。
只需定义一个鉴别器列,如下所示:
@Entity
@DiscriminatorColumn(name="REF_TYPE")
public abstract class RefData {
但如果你不想依赖JPA继承策略,你可以使用MappedSuperclass来代替:
@MappedSuperclass
public abstract class RefData {
JPA规范
实体可以从提供持久实体状态和映射信息的超类继承,但它本身不是实体。通常,目的这样一个映射的超类是定义多个实体类共有的状态和映射信息.
记住你不能同时使用@Entity和@MappedSuperclass。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)