在hibernate中,默认many one   one many  都是使用多方引用一方的ID,作为引用关系,现在我希望能将多方引用一方的自定义字段,请大家帮忙!!!!

解决方案 »

  1.   

    <many-to-one name="channel_recommend"
    class="com.appstore.po.respo.Channel_recommend" update="false"
    insert="false" foreign-key="page_code">
    <column name="page_id"></column>
    </many-to-one><set name="oth_Page" inverse="true" table="Oth_page">
         <key column="page_id" foreign-key="page_code"></key>
         <one-to-many class="com.appstore.po.otherpo.OthPage"/>
         </set>
    我希望Oth_page的page_id引用Channel_recommend的page_code
    但是上面的写法不对,希望大家讲解
      

  2.   


    首先更正一下,hibernate不主张用联合主键。hibernate的创始人Gavin King 说:严重反对使用composite-id,任何情况下 不要使用复合主键。不知道楼主是不是想外键不是自增序列,而是另一个唯一字段?
    我也正想做这个,订单明细表配置:
    <many-to-one name="order" column="ORDER_ID" class="com.cn.pojo.Order"/>
    订单表配置:
     <!--复合多对多-->
    <bag name="orderproduct" table="order_product">
    <key>
    <column name="ORDER_ID"></column>
    </key>
    <composite-element
    class="com.cn.pojo.OrderProduct">
    <property name="quantity"></property>
    <many-to-one column="productcode" name="product"
    class="com.cn.pojo.Product">
    </many-to-one>
    </composite-element>
    </bag>
    我把对应的column设置为非id自增字段,可是当插入时,级联插入的值还是自增的id。并非order_id自定义字段。
    我的订单表有2个id,一个是自增id,一个是order_id=“cws001”这样的自定义编号
    我想在明细的时候对应的订单id是订单表的order_id  cws001这样的内容。
    可是我如上的配置却只能做到把id自增序列给级联进去。楼主共同讨论下????
      

  3.   

    hibernate的创始人Gavin King 说:严重反对使用composite-id,任何情况下 不要使用复合主键。
    那他设计出来干嘛的
      

  4.   


    至于这个我也不明白了,不过复合主键确实比较少用,我也没用过。
    每张表都会给一个序列标识id。
    我刚才试了下我的那个,
    <bag>配置的那段改成
       <bag name="orderproduct">
    <key column="ORDER_ID" />
    <one-to-many class="com.cn.pojo.OrderProduct"/>
    </bag>这样也能执行级联操作,只是比上面那个多了一条update语句,意味着性能不如上一个。
    hibernate的多对多好难啊都不知道什么时候操作什么。