<?xmlversion="1.0"?>
<!DOCTYPEhibernate-mappingPUBLIC
"-//Hibernate/Hibernate Mapping DTD 2.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<hibernate-mappingpackage="hibernate.study.beans">
<classname="Item"table="item">
<cacheusage="read-write"/>
<idname="id"type="java.lang.Integer"column="ITEM_ID">
<generatorclass="native"/>
</id>
<timestampname="created"column="CREATED"/>
<propertyname="itemName"type="java.lang.String"column="ITEM_NAME"not-null="true"length="45"/>
<setname="bids"inverse="true"lazy="true"cascade="all-delete-orphan"batch-size="2">
<cacheusage="read-write"/>
<keycolumn="ITEM_ID"/>
<one-to-manyclass="Bid"/>
</set>
</class>
</hibernate-mapping>
<?xmlversion="1.0"?>
<!DOCTYPEhibernate-mappingPUBLIC
"-//Hibernate/Hibernate Mapping DTD 2.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<hibernate-mappingpackage="hibernate.study.beans">
<classname="Bid"table="bid"batch-size="2">
<cacheusage="read-write"/>
<idname="id"type="java.lang.Integer"column="BID_ID">
<generatorclass="native"/>
</id>
<propertyname="bidName"type="java.lang.String"column="BID_NAME"not-null="true"length="45"/>
<many-to-onename="item"class="Item"column="ITEM_ID"not-null="true"/>
</class>
</hibernate-mapping>
<hibernate-mappingpackage="hibernate3.study.beans">
<classname="ItemLegacy"table="item_legacy">
<idname="id"type="java.lang.Integer"column="item_id">
<generatorclass="native"/>
</id>
<propertyname="itemName"type="java.lang.String"column="item_name"not-null="true"length="45"/>
<propertyname="childId"type="java.lang.Integer"column="child_id"/>
<setname="bids"inverse="true"lazy="true"cascade="all-delete-orphan"batch-size="2">
<keycolumn="relation_id" property-ref="childId"/>
<one-to-manyclass="BidLegacy"/>
</set>
</class>
</hibernate-mapping>
<hibernate-mappingpackage="hibernate3.study.beans">
<classname="BidLegacy"table="bid_legacy">
<idname="id"type="java.lang.Integer"column="bid_id">
<generatorclass="native"/>
</id>
<propertyname="bidName"type="java.lang.String"column="bid_name"not-null="true"length="45"/>
<many-to-onename="item"class="ItemLegacy"column="relation_id"property-ref="childId"not-null="true"/>
</class>
</hibernate-mapping>
在<keycolumn="relation_id"property-ref="childId"/>加上property-ref="childId"
在many-to-one 上也加上这句,这样这个问题就解决了。
在Hibernate2。18中 <key>中并没有property-ref这个属性。通过这次我加深了对Inverse属性的认识。感觉其实property-ref默认的是连到主表的ID上的。当我们把set中的主控方改为主表(ItemLegacy)时,我们可以去掉manytoone方的property-ref属性。这时发现当插入一个item(有一个child)是生成2个insert语句和一个update语句,其中插入child的语句中的relation_id对应item的主键,然后update语句把他更新为主表中的child_id。当把set中的主控方改为子表(BidLegacy inverse=true)时生成2条insert语句这时候子表会在插入前拿到主表的child_id,我想这就是称着为主控的原因。