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里面写上中间表的名字,没有中间实体
------解决方案--------------------
+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