2011-09-28 59 views
1

我有一個簡單的Spring-Hibernate應用程序。 我有3類作物,市場和農民與結構是這樣的:組合鍵與兩個元素作爲外鍵的映射

class crop 
{ 
    private int cropId; 
} 
class market 
{ 
    private int marketId; 
} 
class farmer 
{ 
    private Crop crop; 
    private Market market; 
} 

農民表有一個複合鍵{cropid,marketid}。 現在,我如何將這個關係映射到.hbm.xml文件中分別參考作物和市場表的複合關鍵元素cropidmarketid。 我對hibernate和spring很陌生。任何建議將有很大的幫助!

回答

0

在farmer.hbm.xml你需要做一個composite-id這樣

<composite-id class="FarmerId" mapped="true"> 
     <key-property name="cropid"/> 
     <key-property name="marketid"/> 
</composite-id> 

,寫一個類FarmerID實現Serializable和覆蓋equals()hashCode()

equals()你測試,如果對象是相同的還是具有相同的值並返回一個布爾值。在hashCode()中,您將生成一個散列值並將其返回。

@Override 
public boolean equals(Object obj) { 
    if (this == obj) 
     return true; 
    if ((obj == null) || (obj.getClass() != this.getClass())) 
     return false; 

    FarmerID test = (FarmerID) obj; 
    boolean flagCrop = cropid == test.cropid; 
    boolean flagMarket = marketid == test.marketid; 

    return flagCrop && flagMarket; 
} 

@Override 
public int hashCode() { 
    int hash = 7; 
    hash = 31 * hash + cropid.hashCode(); 
    hash = 31 * hash + marketid.hashCode(); 
    return hash; 
} 
+0

感謝您的回覆。如果我把ID作爲一個單獨的類來使用,它會是一個更好的方法嗎?另外,你可以舉一個例子來說明如何重寫equals()和hashcode()? – Shaggy

+0

我不確定,如果這是一個更好的方法。這是我目前使用的唯一一個。 – Gille

+0

謝謝Gille ...它工作:) – Shaggy