0

首先,我对 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 中被广泛使用。

谢谢

梅萨姆特。

4

1 回答 1

4

您只需用 GenericEntity 类注释@MappedSuperclass,每个实体用@AttributeOverride(s).

注释的 javadoc 解释了它。

于 2012-07-23T16:45:18.300 回答