2012-02-20 56 views
2

我有一個表項目與領域休眠:如何讓一個反向連接的實體(一個對一個)


ID 
PROJECT_BASELINE_ATTRIBUTES_ID (FK for table PROJECT_BASELINE_ATTR) 

此表具有以下映射


<hibernate-mapping package="com.initech.db.model"> 
    <class name="com.initech.db.model.Project" table="PROJECT"> 

     <id name="id" column="id" type="java.lang.Long"> 
      <meta attribute="use-in-tostring">true</meta> 
      <generator class="sequence"> 
       <param name="sequence">PROJECT_ID_SEQ</param> 
      </generator> 
     </id> 

     <many-to-one name="projectBaselineAttributes" column="PROJECT_BASELINE_ATTRIBUTES_ID" class="com.initech.db.model.ProjectBaselineAttributes" cascade="all" not-null="true"> 
      <meta attribute="use-in-tostring">true</meta> 
     </many-to-one>^ 

    </class> 
</hibernate-mapping> 

各Project.java類有字段


private Long id; 
private ProjectBaselineAttributes projectBaselineAttributes; 

此外,我有在能夠PROJECT_BASELINE_ATTR,含有該字段


ID 

Hibernate映射:

​​

各個ProjectBaselineAttributes.java類具有字段


private Long id; 
private Set projects = new HashSet(); 

當前的映射是不理想的,因爲兩個表之間的關係實際上是一對一的關係,但在ProjectBaselineAttributes中,我有一組Pro即使對於一個ProjectBaseLineattributes總是有一個Projet。我應該映射看起來像ProjectBaselineAttributes這樣我就可以得到相關的項目「奇」,即,使類ProjectBaselineAttributes.java是這樣的:


private Long id; 
private Project project; 

回答

1

這裏的Hibernate documentation其中詳細的部分如何使用外鍵映射這樣的雙向一對一關聯。

<class name="Person"> 
    <id name="id" column="personId"> 
     <generator class="native"/> 
    </id> 
    <many-to-one name="address" 
     column="addressId" 
     unique="true" 
     not-null="true"/> 
</class> 

<class name="Address"> 
    <id name="id" column="addressId"> 
     <generator class="native"/> 
    </id> 
    <one-to-one name="person" 
     property-ref="address"/> 
</class> 

create table Person (personId bigint not null primary key, addressId bigint not null unique) 
create table Address (addressId bigint not null primary key) 
1

您可以嘗試下面的映射,如在example中所述。

在父bean,

<one-to-one name="one2oneSubA1" class="com.manu.hibernate.mappings.domain.ASub1" cascade="all" 
      property-ref="parent"/> 

在子bean,

<many-to-one name="parent" 
      class="com.manu.hibernate.mappings.domain.AMain" column="a_id" 
      unique="true" cascade="save-update" />