MySQLIntegrityConstraintException - Grails中的“无法添加或更新子行:外键约束失败”

时间:2012-08-23 06:42:02

标签: grails

我试图从XML文件中获取一些订单信息并尝试将其存储在数据库(MySQL)表中。我可以从XML文件中检索订单信息,但是当我尝试插入表时,它会将错误显示为MySQLIntegrityConstraintException。

我的程序包含如下,

def Order = new XmlParser().parse("MyXml.xml")
def set1 = sql.dataSet("order_item")
def set2 = sql.dataSet("order_header")
Order.order_item.each {
// retrieving order information and storing
}
set1.add(Column_Name1:order_id,Column_Name2:field2,Column_Name3:field3)
set2.add(Column_Name1:order_id)

我在下面详细列出了错误

  

警告:执行失败:插入order_item(order_id,order_item_seq_id,    order_item_type_id,product_id,prod_catalog_id,quantity,unit_price,unit_lis   t_price,item_description,status_id)值(?,?,?,?,?,?,?,?,?,?)因为   use:无法添加或更新子行:外键约束失败(ecommerc e/order_item,CONSTRAINT ORDER_ITEM_HDR FOREIGN KEY(ORDER_ID)REFERENCES order_headerORDER_ID) )   抓到:com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationExcepti   on:无法添加或更新子行:外键约束失败(ecommerce /order_item,CONSTRAINT ORDER_ITEM_HDR FOREIGN KEY(ORDER_ID)REFERENCES o rder_headerORDER_ID) )   com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:Cann   添加或更新子行:外键约束失败(ecommerce/order_i tem,CONSTRAINT ORDER_ITEM_HDR FOREIGN KEY(ORDER_ID)REFERENCES order_hea derORDER_ID))           在com.mysql.jdbc.Util.handleNewInstance(Util.java:409)           在com.mysql.jdbc.Util.getInstance(Util.java:384)           在com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1041)           在com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3562)           在com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3494)           在com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1960)           在com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2114)           在com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2696)           在com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.ja   VA:2105)           在com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java)   :2398)           在com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java)   :2316)           在com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java)   :2301)           at db2xml.XMLToDatabase $ _main_closure2.doCall(XMLToDatabase.groovy:52)           at db2xml.XMLToDatabase.main(XMLToDatabase.groovy:38)

任何人都可以帮我解决这个问题。提前致谢

1 个答案:

答案 0 :(得分:3)

首先要更新外键约束表然后更新特定表。上面代码中的一个小变化是

set2.add(Column_Name1:order_id) set1.add(Column_Name1:order_id,Column_Name2:field2,Column_Name3:field3)

第2组应首先更新,然后更新第1组。

现在它对我有用了。谢谢大家。