我想更新表中的键,而其他表中的键为FK。
em.createNativeQuery("SET FOREIGN_KEY_CHECKS=0").getResultList().
em.createNativeQuery("update user set name = ?1 where name = ?2").executeUpdate();
query.setParameter(1, "aa");
query.setParameter(2, "bb");
但是,即使禁用了外键检查,我也会遇到异常。
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:
无法删除或更新父行:外键约束失败
(
test_import_1
。assessment_user
,约束FK32kg3rlqty5i2i729a22icn7q
外键(user_name
)参考user
(name
)) 最佳答案
将两个查询作为一个查询使用怎么样:
StringBuilder query = new StringBuilder();
query.append("BEGIN ")
.append("SET FOREIGN_KEY_CHECKS = 0 ;")//query to disable foreign key checks
.append("UPDATE user SET name = ?1 WHERE name = ?2;")//The update query
.append("SET FOREIGN_KEY_CHECKS = 1")//when you finish enable the check
.append(" END;");
Query q = em.createNativeQuery(query.toString());
query.setParameter(1, "aa");
query.setParameter(2, "bb");
q.executeUpdate();// Note executeUpdate() should be used AFTER you set the parameters
第二种选择:
em.createNativeQuery("SET FOREIGN_KEY_CHECKS = 0").executeUpdate();
Query q = em.createNativeQuery("UPDATE user SET name = ?1 WHERE name = ?2;");
query.setParameter(1, "aa");
query.setParameter(2, "bb");
q.executeUpdate();
em.createNativeQuery("SET FOREIGN_KEY_CHECKS = 1").executeUpdate();
关于java - 禁用外键检查后无法删除或更新父行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48182028/