2012-07-23 157 views
0

首先,我對JPA和Hibernate Annotations很陌生。休眠JPA繼承id映射

我有很多系統和解決方案是在我當前的框架中開發的,它基於數據訪問層上的hibernate 3.5和hbm.xml。現在我已經決定遷移到hibernate 4.1和Annotation,並刪除hbm.xml文件。

但是我的問題出現了。

我有一個名爲GenericEntity的包含「id」和其他字段(如「版本」和...)的所有實體的基類。該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 
} 

和你hml.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和版本添加到數以萬計的實體中。

另外,我不能對GenericEntity使用hibernate繼承。因爲我不能輕易改變我現有的表格,另一方面,它的性能會受到很大的損失。

此外,我想盡量減少我的框架的其他部分的變化。 GenericEntity廣泛用於DAL。

謝謝

Meysam Te。

回答

4

您只需要用@MappedSuperclass註釋GenericEntity類,並且每個實體都使用@AttributeOverride(s)

註解的javadoc解釋它。

+0

坦克,你節省了我的時間。但我有「GeneratedValue策略」的問題,某處我需要身份和某處我需要SEQUENCE。我怎麼能覆蓋子類? – 2012-07-25 18:13:33