Hibernate JPA继承的id映射
首先,我对JPA和Hibernate注释非常陌生 我在当前的框架中开发了许多系统和解决方案,该框架基于hibernate 3.5和数据访问层上的hbm.xml。现在我决定转到Hibernate4.1和Annotation,并去掉hbm.xml文件 但我的问题来了 我的所有实体都有一个名为GenericEntity的基类,它包含“id”和一些其他字段(如“version”和…)。此GenericEntity不直接映射到任何物理表,每个实体负责将这些字段映射到物理表/列 现在在注释中,我找不到任何方法来省略实体中的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不直接映射到任何物理表,每个实体负责将这些字段映射到物理表/列 现在在注释中,我找不到任何方
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,你节省了我的时间。但我对“生成价值策略”有问题,在某些地方我需要身份,在某些地方我需要顺序。我如何在子类中重写它?坦克,你节省了我的时间。但我对“生成价值策略”有问题,在某些地方我需要身份,在某些地方我需要顺序。如何在子类中重写它?