hibernate在默认情况下,从表跟主表的关联,是通过主键来关联的,但是如果双方关联的字段都不是主键的情况下,可以在<many-to-one 这方设置一下property-ref,这样就可不通过主键来关联,例如:ListCommon(是<many-to-one方)的listMemberSid字段,要跟Broker(是<one-to-many方)表的brokMemberSid字段关联,只要在ListCommon的xml中加入property-ref=“brokMemberSid”,这样就等于说明了ListCommon表是通过Broker表的brokMemberSid属性来跟Broker来关联的,如下:
Broker.hbm.xml
..........
<hibernate-mapping package="com.crb2b.data.bo">
<class name="Broker" table="crb2b_broker" >
<id name="brokId" type="java.lang.Integer">
<column name="brokId" />
<generator class="native"></generator>
</id>
<property name="brokMemberSid" type="java.lang.String">
<column name="brokMemberSid" length="11" not-null="true" />
</property>
<set
name="crb2bListcommons"
lazy="false"
inverse="true"
cascade="all"
>
<key>
<column name="listMemberSid" length="11" not-null="true" />
</key>
<one-to-many class="ListCommon" />
</set>
ListCommon.hbm.xml:
<hibernate-mapping package="com.crb2b.data.bo">
<class name="ListCommon" table="crb2b_listcommon" >
<id name="licoId" type="java.lang.Integer">
<column name="licoId" />
<generator class="native"></generator>
</id>
<many-to-one name="crb2bBroker" class="Broker" fetch="select" property-ref="brokMemberSid">
<column name="listMemberSid" length="11" not-null="true" />
</many-to-one>
详细参看:http://hi.baidu.com/piao_live/blog/item/9fa786d02706168aa0ec9ce9.html