假设一个商城项目中,有商品和订单两个表,他们是多对多关系,那么在映射的时候肯定会生成一张中间表,一般来说这个中间表存储的就是这两个表的id,但是现在有个问题是我想把商品的成交价也放在中间表里面请问该如何映射呢

解决方案 »

  1.   

    下面是hibernate3.2的文档中多对一采用第三方表的实现实例, 使用了一个join标签关联了第三方表,我猜测可以使用这个实现,不过这会儿没有环境。。你试试吧...7.3.2. 多对一(many to one)
    基于连接表的单向多对一关联在关联关系可选的情况下应用也很普遍。 <class name="Person">
        <id name="id" column="personId">
            <generator class="native"/>
        </id>
        <join table="PersonAddress" 
            optional="true">
            <key column="personId" unique="true"/>
            <many-to-one name="address"
                column="addressId" 
                not-null="true"/>
        </join>
    </class><class name="Address">
        <id name="id" column="addressId">
            <generator class="native"/>
        </id>
    </class>
    create table Person ( personId bigint not null primary key )
    create table PersonAddress ( personId bigint not null primary key, addressId bigint not null )
    create table Address ( addressId bigint not null primary key )
            
      

  2.   

    又考虑了一下你的需求。。
    你的成交价放到中间表之后, 它就不是一个单纯的关联表了, 应该被抽象成为一个独立的实体类(在UML中可以描述成为关联类), 这个类有了自己的有业务意义的属性, 我觉得如果你要对这个进行管理, 可以采用三个实体类:商品、订单、订单项。在订单项中对商品的成交价进行管理商品和订单项是一对多, 每个订单项只管理一种商品。
    订单和订单项是一对多, 每个订单项也只关联一个订单。订单项中可以保存:购买数量,单价(这里的单价是为了管理你商品的历史价格,商品类中的价格永远是当前价格),成交价...根据业务要求, 在订单项中也可以抽象出一些以备扩展的属性。
      

  3.   

    1楼讲的挺好的,不过方法就有些复杂了哦,要是用jpa做的话那就简单多了哦