日期:2014-05-17  浏览次数:20739 次

hibernate 多对多中间表级联更新的问题
我是做一个电子商城系统,里面有个购物车功能,购物车里面配置了与商品单向多对多关联,代码如下:
<!--映射Cart到Product的多对多单向关联-->
<set name="product"
 table="Cartselectedmer"
 lazy="true"
 cascade="save-update">
 <key column="CID"/>
 <many-to-many class="com.ORM.Product" column="PID"/>
</set>
然后,我给中间表建立了一个实体表,并且有独立的主键:
中间表的属性:
        private Integer csid; //商品条目id
private Integer cid; //购物车id
private Integer pid; //商品id
private Integer pnumber; //商品数目
private Double price; //商品单价
private Double money; //支付金额
而且也配置了csid的主键生成策略:
 <id name="csid" type="int">
            <column name="CSID" precision="22" scale="0" />
            <generator class="native">
             <param name="sequence">SEQ_CSID</param>
            </generator>
 </id>
但是每次hibernate级联更新时都出问题,代码如下:(新建购物车的部分代码)
cart = new Cart();
cart.setCartstatus(new Integer(0));
cart.setMem(member);
cart.setMoney(Double.valueOf(number*pro.getPrice().doubleValue()));
cart.getProduct().add(pro);
session.save(cart);
tx.commit();
就会报错:
2013-03-17 12:23:29 [日志信息] SQL Error: 1400, SQLState: 23000
2013-03-17 12:23:29 [日志信息] ORA-01400: 无法将 NULL 插入 ("ESHOP"."CARTSELECTEDMER"."CSID")

2013-03-17 12:23:29 [日志信息] Could not synchronize database state with session
        
就是说中间表的主键没有自动生成,而是插入的一个null,并且hibernate的插入语句是这样的:
Hibernate: insert into Cartselectedmer (CID, PID) values (?, ?)
而不是insert into Cartselectedmer (CSID,CID, PID) values (? ,?, ?)
这个问题怎么解决啊.....
hibernate many-to-many?? 级联更新 主键生成

------解决方案--------------------
多对多还造出来个中间表实体?搞笑呢?
你造出来中间表,那就是三个实体,两个一对多。
多对多就是只有两个实体,many-to-many里面写上中间表的名字,没有中间实体
------解决方案--------------------
引用:
多对多还造出来个中间表实体?搞笑呢?
你造出来中间表,那就是三个实体,两个一对多。
多对多就是只有两个实体,many-to-many里面写上中间表的名字,没有中间实体

+1
我把我的配置给你看看。角色与权限
<bag name="sysRole" order-by="rightCode" inverse="true" table="SYS_ROLE_RIGHT">
            <key>
             <!--name是中间表中的指向对方的属性的列名  -->
                <column name="RF_RIGHT_CODE" length="50" not-null="true" />
            </key>
            <!-- column 是中间表对应本对象的外键id -->
            <many-to-many class="com