Hibernate JPA继承了id映射

时间:2012-07-23 16:14:53

标签: hibernate inheritance annotations

首先,我对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。

1 个答案:

答案 0 :(得分:4)

您只需要使用@MappedSuperclass注释GenericEntity类,并使用@AttributeOverride(s)注释每个实体。

注释的javadoc解释了它。