大家好!最近做hibernate练习时遇到的问题,请高手帮忙看看! 
表1 cart(主键:id); 表2 merchandise(主键:id); 表3 中间表 cartselectedmer(主键:id ,外键1 :cart, 外键2: merchandise) 
cart.hbm.xml: 
<set name="cartselectedmers" inverse="false" lazy="true" 
cascade="save-update" sort="unsorted" mutable="true" 
optimistic-lock="true" embed-xml="true" table="CARTSELECTEDMER"> 
<key> 
<column name="CART" precision="8" scale="0" 
not-null="true" /> 
</key> 
<many-to-many class="com.store.model.Merchandise" column="MERCHANDISE" not-found="exception" embed-xml="true" unique="false"/> 
</set> 
因为是单向关联,所以只在cart.hbm.xml里面写了多对多设置。 addCart(){ 
        if (cart == null) { 
cart = new Cart(); 
cart.setCartstatus(new Long(0)); 
cart.setMember(member); 
cart.setMoney(Double.valueOf(amount 
* merchandise.getPrice().doubleValue())); 
cart.getCartselectedmers().add(merchandise); session.save(cart); 
                          } 

如果把红色的那句注释掉,可以往cart表里插入一条记录,即新建一个购物车,但是中间表cartselectedmer里没有记录。如果保留红色的那句,就会抛出异常: 
java.sql.BatchUpdateException: ORA-01400: cannot insert NULL into ("SCOTT"."CARTSELECTEDMER"."ID") 我的所有主键都是用的: 
<id name="id" type="java.lang.Long"> 
<column name="ID" precision="8" scale="0" /> 
<generator class="increment" /> 
</id> 
所以不懂为什么会抛出这个异常!请大伙帮忙分析一下,是多对多配置问题,还是addCart方法代码问题。

解决方案 »

  1.   

    我前面看了一下hibernate的sql输出: 
    Hibernate: select max(ID) from CART 
    Hibernate: insert into SCOTT.CART (MEMBER, MONEY, CARTSTATUS, ID) values (?, ?, ?, ?) 
    Hibernate: insert into CARTSELECTEDMER (CART, MERCHANDISE) values (?, ?) Hibernte 根本就没有取cartselectedmer 表的id, 也没有插id这个字段 
    所以才会抛出:java.sql.BatchUpdateException: ORA-01400: cannot insert NULL into ("SCOTT"."CARTSELECTEDMER"."ID") 请问为什么会有这种情况,是不是和数据库有关系?我用的是oracle9.