将两个元素作为外键映射复合键

时间:2011-09-28 17:15:18

标签: hibernate spring

我有一个简单的Spring-Hibernate应用程序。 我有三类农作物,市场和农民,其结构类似于:

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

农民表有一个复合键{cropid,marketid}。 现在,如何将此关系映射到分别在cropid文件中引用crop和market表的复合键元素marketid.hbm.xml。 我对冬眠和春天都很陌生。任何建议都会有很大的帮助!!

1 个答案:

答案 0 :(得分: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;
}