继续reading-from-XML-and-storing-the-values-in-database-using-grails
的帖子我正面临另一个问题。由于employee id与其他表相关,因为我认为将数据插入数据库时没有冲突,我想在grails代码中添加以避免出现以下错误。
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:不能 添加或更新子行,外键约束失败..(CONSTRAINT'EMPLOYEE_ID_HEADER' FOREIGN KEY('EMPLOYEE_ID')参考'employee_header'('employee_id'))
此处employee_id是一列,employee_header是一个单独的表,其中包含employee_id作为外键。
答案 0 :(得分:1)
最后我得到了答案,当您在数据库中插入值时,相关的外键表将最初受到影响。因此,要处理这种情况,我们必须首先插入外键相关表,然后是我们需要准确添加的表。
作为参考,起初我已经给出了像这样的代码
sql.executeInsert("insert into order_item (order_id,product_id,
order_item_seq_id) values (${order_id},${product_id},${order_item_seq_id})")
sql.executeInsert("insert into product(product_id) values(${product_id})")
首先插入order_item
表,然后插入外键约束表product
,因此未插入数据。所以正确的代码是
sql.executeInsert("insert into order_header(order_id) values(${order_id})")
sql.executeInsert("insert into product(product_id) values(${product_id})")
sql.executeInsert("insert into order_item (order_id,product_id,
order_item_seq_id) values (${order_id},${product_id},${order_item_seq_id})")
现在,这会成功插入数据而不会出错。