2011-09-28 58 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