2013-03-28 107 views
2

我有一個主表,它有一個唯一的ID爲d1Id的D1。 d1Id唯一標識D1記錄,並且也是表格中的主鍵。我有表2是D2,它有一個d2seq作爲主鍵,但D2也有d1Id,它是唯一的,在D1上有一個外鍵約束(我認爲)。但我確定它是唯一的,ID是一樣的。我正在嘗試使用hibernate進行D1調用時檢索d2值,並且由於編譯時錯誤,我無法獲得正確的hbm。在外鍵上一對一休眠

問題的底線是,我需要在兩個表之間建立一對一的關係,在第二個表中,連接的id不是表的主鍵。我見過的所有搜索google的例子都有這樣的情況:第二個表上的ID也是第二個表的主鍵。讓我告訴你我現在擁有的HBM文件。

<hibernate-mapping default-lazy="true" 
package="com.xxx.xx.customer.dto"> 
<class name="D1" table="D1" dynamic-update="true"> 
    <id name="dString" column="DID" type="java.lang.String" 
     unsaved-value="null" length="9"> 
     <generator class="assigned"/> 
    </id> 
... 

<one-to-one name="d2" class="com.xxx.xx.customer.dto.D2" > 
     <!-- column name="d1Id" /--> 
    </one-to-one> 

在我的D2第二HBM,我在這裏停留

<hibernate-mapping default-lazy="true" package="com.xxx.xx.customer.dto"> 
<class name="D2" table="D2" dynamic-update="true"> 
    <id name="id" column="D2ID" type="integer"> 
     <generator class="native"> 
      <param name="sequence">D2SEQ</param> 
     </generator> 
    </id> 

<id name="d1id" column="D1ID" type="java.lang.String" 
     unsaved-value="null" length="9"> 
     <generator class="assigned"/> 
    </id> 

我顯然不能使用第二個ID字段d1id這裏,因爲1>它不是一個主鍵和2>我已經使用過它。那麼我的HBM文件應該如何進行這項操作?

此外,一旦我有我的HBMs,我想獲得D2信息,而我通過DTO查詢D1。我怎樣才能做到這一點?

回答

0

爲什麼不能使用@ManyToOne關係?通常它比@OneToOne

提供更大的靈活性