首先,我对JPA和Hibernate Annotations很新。
我在当前框架中开发了许多基于数据访问层上的hibernate 3.5和hbm.xml的系统和解决方案。现在我决定转向hibernate 4.1和Annotation并删除hbm.xml文件。
但问题来了。
我的所有名为GenericEntity的实体都有一个基类,其中包含“id”和其他一些字段(如“version”和...)。此GenericEntity 不直接映射到任何物理表,每个实体负责将这些字段映射到物理表/列。
现在在Annotation中,我找不到任何方法来省略实体中的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的映射,并且User没有关于GenericEntity的继承映射。
如何使用注释做到这一点?!!
解决方案是将getId和setId定义为抽象方法,但我不能将id和版本添加到我的数万个实体中。
另外,我不能为GenericEntity使用hibernate继承。因为,我不能轻易地更改当前的表格,另一方面它会因性能而受到很多惩罚。
另外,我希望尽量减少对框架其他部分的更改。 GenericEntity在DAL中广泛使用。
由于
Meysam Te。
答案 0 :(得分:4)
您只需要使用@MappedSuperclass
注释GenericEntity类,并使用@AttributeOverride(s)
注释每个实体。
注释的javadoc解释了它。