订单详细表分别有字段: 订单ID,商品名称,商品价格,经手人 ,商品数量,商品小计价格。前4样分别是与订单表(oid),水果表(fname,fprice),经手人表(hname)外键约束。
但是在myeclipse中插入不了订单详细信息表的信息,其他可以。但用SQL语句在数据库中可以实现插入。
然后插入的时候出现以下异常:
org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:94)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:275)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:266)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:167)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1027)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:365)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137)
at dao.OrderdetailDAO.save(OrderdetailDAO.java:24)
at test2.main(test2.java:37)
Caused by: java.sql.BatchUpdateException: Cannot add or update a child row: a foreign key constraint fails (`test`.`orderdetail`, CONSTRAINT `fk_orderdetail_fname` FOREIGN KEY (`fname`) REFERENCES `fruit` (`fname`))
at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1666)
at com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:1082)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268)
... 9 more
在花了一天时间找资料后得出结果,<many-to-one>缺少了property-ref="" 指明要关联的唯一索引属性名
在订单详细信息表的配置(orderdetail.hbm.xml)中应该如下配置
<many-to-one name="fruitByFprice" class="vo.Fruit" property-ref="fprice">
<column name="fprice" not-null="true"/>
</many-to-one>
这里只是把其中之一的的属性,其他同理。
出现的具体问题这参考这里
http://bbs.csdn.net/topics/391934910?page=1#post-401041762