组合键与两个元素作为外键的映射
问题描述:
我有一个简单的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
文件中分别参考作物和市场表的复合关键元素cropid
和marketid
。 我对hibernate和spring很陌生。任何建议将有很大的帮助!
答
在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;
}
感谢您的回复。如果我把ID作为一个单独的类来使用,它会是一个更好的方法吗?另外,你可以举一个例子来说明如何重写equals()和hashcode()? – Shaggy
我不确定,如果这是一个更好的方法。这是我目前使用的唯一一个。 – Gille
谢谢Gille ...它工作:) – Shaggy