首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

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

2013-03-26 
hibernate多对多中间表级联更新的问题我是做一个电子商城系统,里面有个购物车功能,购物车里面配置了与商品

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.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>

热点排行