大家好!最近做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 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方法代码问题。
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.