我想更新表中的键,而其他表中的键为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_1assessment_user,约束
  FK32kg3rlqty5i2i729a22icn7q外键(user_name)参考
  username))

最佳答案

将两个查询作为一个查询使用怎么样:

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/

10-11 22:02
查看更多