Hibernate JPA继承的id映射

Hibernate JPA继承的id映射,hibernate,inheritance,annotations,Hibernate,Inheritance,Annotations,首先,我对JPA和Hibernate注释非常陌生 我在当前的框架中开发了许多系统和解决方案,该框架基于hibernate 3.5和数据访问层上的hbm.xml。现在我决定转到Hibernate4.1和Annotation,并去掉hbm.xml文件 但我的问题来了 我的所有实体都有一个名为GenericEntity的基类,它包含“id”和一些其他字段(如“version”和…)。此GenericEntity不直接映射到任何物理表,每个实体负责将这些字段映射到物理表/列 现在在注释中,我找不到任何方

首先,我对JPA和Hibernate注释非常陌生

我在当前的框架中开发了许多系统和解决方案,该框架基于hibernate 3.5和数据访问层上的hbm.xml。现在我决定转到Hibernate4.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使用hibernate继承。因为,我不能轻易地更改当前的表,另一方面,这会对性能造成很大的损失

此外,我希望尽量减少对框架其他部分的更改。通用实体在DAL中被广泛使用

谢谢


梅萨姆特

只需使用
@MappedSuperclass
注释genericeentity类,并使用
@AttributeOverride
注释每个实体


注释的javadoc解释了这一点。

您只需要使用
@MappedSuperclass
注释GenericEntity类,并使用
@AttributeOverride>注释每个实体


注释的javadoc解释了这一点。

tanks,你节省了我的时间。但我对“生成价值策略”有问题,在某些地方我需要身份,在某些地方我需要顺序。我如何在子类中重写它?坦克,你节省了我的时间。但我对“生成价值策略”有问题,在某些地方我需要身份,在某些地方我需要顺序。如何在子类中重写它?