hibernate 多对多中间表级联更新的问题

prince_li_ 2013-03-17 12:44:28
我是做一个电子商城系统,里面有个购物车功能,购物车里面配置了与商品单向多对多关联,代码如下:
<!--映射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 (? ,?, ?)
这个问题怎么解决啊.....
...全文
585 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
a470755170 2013-05-17
  • 打赏
  • 举报
回复
怎么写的? 我也遇到这个问题不晓得怎么写了
prince_li_ 2013-03-24
  • 打赏
  • 举报
回复
多谢各位帮助 ,小弟已经解决这个问题了
prince_li_ 2013-03-24
  • 打赏
  • 举报
回复
引用 9 楼 forgetsam 的回复:
多对多还造出来个中间表实体?搞笑呢? 你造出来中间表,那就是三个实体,两个一对多。 多对多就是只有两个实体,many-to-many里面写上中间表的名字,没有中间实体
正解 其实我是这个意思,就是说关系表不是单独的关系表,而是里面还有一些其他的数据信息,所以想要独立出来做一个实体表,拥有独立的主键,可以拆车两个一对多,或者是用复合主键,不要用独立主键
李志遠 2013-03-18
  • 打赏
  • 举报
回复
中间表需要属性的话 参考http://blog.csdn.net/mini_snow/article/details/5599902
StriveYung 2013-03-18
  • 打赏
  • 举报
回复
<!-- Associations --> <!-- roles,我与Role(角色)的多对多 --> <set name="roles" table="user_role"> <key column="userId" /> <many-to-many class="Role" column="roleId" /> </set> <!-- department,我与Department(部门)的多对一 --> <many-to-one name="department" column="DEPARTMENTID" class="Department"></many-to-one> <!-- sendedMessage,我与已发送短消息(MessageInfo)的一对多 --> <set name="sendedMessage"> <key column="senderId"></key> <one-to-many class="MessageInfo" /> </set> <!-- receiveMessage,我与已接收短消息(MessageInfo)的一对多 --> <set name="receiveMessage"> <key column="receiverId"></key> <one-to-many class="MessageInfo" /> </set> 你那些说不清楚 你看看我的吧 我的是用户表 就这样设置 然后喊生成表的时候就会有了
且活且珍惜 2013-03-18
  • 打赏
  • 举报
回复
hibernate中间表不是自动生成的么?怎么还要建实体表?我也很久没配了
jsp_style 2013-03-18
  • 打赏
  • 举报
回复
引用 9 楼 forgetsam 的回复:
多对多还造出来个中间表实体?搞笑呢? 你造出来中间表,那就是三个实体,两个一对多。 多对多就是只有两个实体,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.style.yft.entity.SysRole" column="RF_ROLE_ID" />
        </bag>
另一个
<bag name="sysRight"  table="SYS_ROLE_RIGHT" lazy="false">
            <key>
                <column name="RF_ROLE_ID" precision="8" scale="0" not-null="true" />
            </key>
            <many-to-many class="com.style.yft.entity.SysRight" column="RF_RIGHT_CODE" />
        </bag>
forgetsam 2013-03-18
  • 打赏
  • 举报
回复
多对多还造出来个中间表实体?搞笑呢? 你造出来中间表,那就是三个实体,两个一对多。 多对多就是只有两个实体,many-to-many里面写上中间表的名字,没有中间实体
owen_wood 2013-03-18
  • 打赏
  • 举报
回复
看在大家都在做毕业设计的份上 来帮我看看吧:http://bbs.csdn.net/topics/390395962 多谢了……
prince_li_ 2013-03-17
  • 打赏
  • 举报
回复
引用 3 楼 hou_guannan 的回复:
我也在做毕业设计,也是网上购物商城,各种不会啊!帮你顶一个!
多谢啦 我们都要快要交论文了,我设计都还没做完
hou_guannan 2013-03-17
  • 打赏
  • 举报
回复
我也在做毕业设计,也是网上购物商城,各种不会啊!帮你顶一个!
prince_li_ 2013-03-17
  • 打赏
  • 举报
回复
在线等答案
prince_li_ 2013-03-17
  • 打赏
  • 举报
回复
自己顶一下,毕业设计啊,就要交了,哪位大哥帮帮忙!

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧