2013-03-07 173 views
3
DB Table REQUEST: 
{ 
    primary key REQUEST_ID, 
    String REQUEST_DETAILS 
} 

DB Table INVALID_REQUEST_DETAILS{ 
    (foreign key, primary key) fk_req_id references REQUEST.REQUEST_ID, 
    String INVALID_COMMENTS, 
    String APPROVER_NAME 
} 

因此,你可以看到有一個請求INVALID_REQUEST_DETAILS。由於某些我不明白的原因,我聽說Hibernate把它映射爲多對一的關係。我有以下代碼爲我的.hbm.xml文件:休眠外鍵是主鍵

<hibernate-mapping> 
    <class name="InvalidRequestDetails" table="INVALID_REQUEST_DETAILS"> 
    <id name="id" column="fk_req_id"> 
    <generator class="foreign"> 
     <param name="property">request</param> 
    </generator> 
    </id> 

    ... (other column mappings omitted) ...  

    <many-to-one name="request" class="Request" unique="true" not-null="true" /> 
</class> 
</hibernate-mapping> 

請不要把我同「閱讀Hibernate文檔」除非您還提供了一些解釋,它包含的概念非常稀疏的解釋,我有已經閱讀過。我遇到的問題是我的映射文件顯然是錯誤的,因爲我無法在我的表中插入任何記錄。

問題:

  1. 我怎樣才能解決我的.hbm.xml文件?爲什麼?
  2. 如上所述,如果我具有邏輯上的一對一關係,爲什麼需要多對一的標籤?這裏的多對一和一對一之間有什麼區別?你什麼時候用哪個?如果我的外鍵不是主鍵,會有什麼改變嗎?

回答

4

不確定你從哪裏得到了你的信息,但是你當然可以將它建模爲一對一。 Here's如何的一個例子。

<hibernate-mapping> 
    <class name="InvalidRequestDetails" table="INVALID_REQUEST_DETAILS"> 
    <id name="id" column="fk_req_id"> 
    <generator class="foreign"> 
     <param name="property">request</param> 
    </generator> 
    </id> 

    ... (other column mappings omitted) ...  

    <one-to-one name="request" class="Request" constrained="true" /> 
</class> 
</hibernate-mapping>