2013-05-27 98 views
0

我想映射一個包含兩個持久對象的類(與數據庫無關的對象),有沒有辦法做到這一點?如果有一個關鍵字/屬性需要使用,那麼我可以從這裏開始。如果沒有直接的方法,請您在高層簡要解釋替代步驟?包含兩個持久對象的對象的映射

class NotPersistent { 
    Private Persistent1 persistent1; 
    Private Persistent2 persistent2; 
    ... 
} 

class Persistent1 { 
    Private Integer id; 
    Private String column1; 
    ... 
} 

class Persistent2 { 
    Private Integer id; 
    Private String column1; 
    ... 
} 
我迄今所做

Hibernate映射

<class name="NotPersistent"> 
    <one-to-one class="Persistent1"></one-to-one> 
    <one-to-one class="Persistent2"></one-to-one> 
    ... 
</class> 

<class name="Persistent1"> 
    <one-to-one class="NotPersistent"></one-to-one> 
    <id ...> 
    <property ...> 
    ... 
</class> 

<class name="Persistent2"> 
    <one-to-one class="NotPersistent"></one-to-one> 
    <id ...> 
    <property ...> 
    ... 
</class> 

如果在正確的軌道上的IM,應該是什麼在<class name="NotPersistent" ..

+0

只爲了解它。 (沒有冒犯的意思)如果在數據庫中沒有表示NotPersistent類,爲什麼要將它映射到Hibernate中,唯一的目的是將東西存入數據庫?如果你能解釋一些潛在的問題,這可能有助於爲解決方案提供建議。 – Carsten

+0

我沒有對類和底層CRUD操作的控制權,他們稱之爲'hibernateTemplate.save(NotPersistent.class,obj)',並要求將其映射到現有的數據庫表。這是不可能完成的嗎? – jchips12

+0

好的,你應該編輯「(與數據庫無關的對象)」部分,因爲它很混亂。而實際上你正試圖將對象保存在數據庫中。你只是在尋找正確的映射。剩下的問題是您可以爲映射做些什麼?你能否映射出需要JoinTable的地方,還有哪些限制? – Carsten

回答

0

好了,沒有什麼屬性否則目前採取的方法看起來是正確的。您使用one-to-one標籤映射。

<class name="NotPersistent" table="xxx"> 
    <one-to-one name="persistent1" class="Persistent1" cascade="save-update"></one-to-one> 

<class name="NotPersistent" table="xxx"> 
    <one-to-one name="nonPersistent" class="NonPersistent"></one-to-one> 

由於我沒有廣泛使用XML映射,我不知道確切的語法。但是這種方法應該讓你開始。另一個問題是實體真的是一對一?它看起來不太可能,因爲這兩個持久實體是如此緊密相關以至於它們可以直接使用一個ForeignKey和一個實體直接耦合。