2010-03-23 244 views
2

我一直在研究它很長一段時間,但仍然無法弄清楚我的代碼有什麼問題。 每個服務都有多個配置文件,但每個配置文件只有一個服務。休眠外鍵映射多對一

Service 
{ 
Long service_id; // primary key 
... getter/setter 
} 

Profile 
{ 
Long profile_id; // primary key 
Long service_id; // foreign key 
... getter and setter 
} 

在Profile.hbm.xml中。我加

< many-to-one name="service_id" class="com.mot.diva.dto.Service" column="SERVICE_ID" cascade="save-update"> 
< /many-to-one> 

這是映射它的正確方法嗎?

回答

9

每個服務都有多個配置文件,但每個配置文件只有一個服務。

然後相應地設計你的對象模型。當使用ORM工具時,您需要考慮對象(實體)和實體之間的關係,而不是ID。在ORM會照顧PK,FK,加入等於是你的代碼應該是這樣的:

public class Service implements Serializable { 
    private Long service_id; // primary key 
    private Set<Profile> profiles = new HashSet<Profile>(); 

    // ... getter/setter 
} 

public class Profile implements Serializable { 
    private Long profile_id; // primary key 
    private Service service; 

    // ... getter and setter 
} 

而且Profile.hbm.xml映射文件:

.... 
<many-to-one name="service" 
      class="com.mot.diva.dto.Service" 
      column="SERVICE_ID" 
      cascade="save-update"> 
</many-to-one> 
... 

而且在Service.hbm.xml(因爲你的協會似乎是雙向的):

... 
<set name="profiles" inverse="true"> 
    <key column="PROFILE_ID" not-null="true"/> 
    <one-to-many class="com.mot.diva.dto.Profile"/> 
</set> 
... 
+0

感謝您的回答。它完美的作品。有時候我對ibatis和hibernate感到困惑。 〜 – Lily

+0

@Lily不客氣。 iBATIS更多的是一個數據映射器(更低層次,更接近數據庫),而不是真正的ORM。使用ORM,您必須考慮對象,而不是表格。 –