首先,我对 JPA 和 Hibernate Annotations 非常陌生。
我在当前框架中开发了许多系统和解决方案,这些框架基于数据访问层上的 hibernate 3.5 和 hbm.xml。现在我决定迁移到 hibernate 4.1 和 Annotation 并摆脱 hbm.xml 文件。
但是我的问题来了。
我的所有实体都有一个名为 GenericEntity 的基类,其中包含“id”和其他一些字段(如“version”和...)。此 GenericEntity不直接映射到任何物理表,每个实体负责将这些字段映射到物理表/列。
现在在注释中,我找不到任何方法来省略实体中的 id 和版本字段/注释
这是我所拥有的:
public abstract class GenericEntity implements Serializable {
public static final short UNSAVED_VALUE = -1;
private long id = UNSAVED_VALUE;
private int version;
... getters and setters
}
public class User extends GenericEntity {
private String username;
private String password;
... getters and setters
}
而 hbm.xml 是
<class name="my.User" table="TBL_USER" optimistic-lock="version">
<id name="id" column="USR_ID" unsaved-value="-1">
<generator class="identity"/>
</id>
<version name="version" column="USR_VERSION"/>
<property name="username" column="USR_USERNAME" type="string" />
<property name="password" column="USR_PASSWORD" type="string" />
</class>
GenericEntity 没有映射,用户也没有关于 GenericEntity 的继承映射。
我怎么能用注释做到这一点?!
一个解决方案是将 getId 和 setId 定义为抽象方法,但我无法将 id 和 version 添加到我的数万个实体中。
另外,我不能对 GenericEntity 使用休眠继承。因为,我不能轻易更改我当前的表,另一方面它会为性能付出很多代价。
另外,我想尽量减少对框架其他部分的更改。GenericEntity 在 DAL 中被广泛使用。
谢谢
梅萨姆特。