【发布时间】:2017-12-11 16:05:27
【问题描述】:
我有两个表,分别名为 users 和 roles。用户只能拥有一个角色。
我想要做的是按 id 删除用户。但我收到以下错误:
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (`supermarket`.`users`, CONSTRAINT `FKcogjq1smjy03v5s2wfegritx6` FOREIGN KEY (`role_id`) REFERENCES `Roles` (`role_id`))
据我了解,我删除了用户中具有外键的行。但我不知道如何删除roles 表中的行,然后才删除users 表中的记录。如何做到这一点只做一个查询?
以下是我的课程:
@Entity
public class Users {
private int userId;
private String login;
private String password;
private Roles roles;
public Users(String login, String password, Roles roles) {
this.login = login;
this.password = password;
this.roles = roles;
}
public Users() {
}
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "role_id")
public Roles getRoles() {
return roles;
}
public void setRoles(Roles roles) {
this.roles = roles;
}
//getters and setters
角色:
@Entity
public class Roles {
private int roleId;
private String roleName;
@Id
@Column(name = "role_id", nullable = false)
public int getRoleId() {
return roleId;
}
public void setRoleId(int roleId) {
this.roleId = roleId;
}
@Basic
@Column(name = "role_name", nullable = true, length = 14)
public String getRoleName() {
return roleName;
}
public void setRoleName(String roleName) {
this.roleName = roleName;
}
}
我是这样删除的:
public void deleteCasher(int id) {
Session session = sessionFactory.openSession();
Query query = session.createQuery("from Users where userId=:id")
.setParameter("id", id);
Users user = (Users) query.uniqueResult();
session.beginTransaction();
session.delete(user);
session.getTransaction().commit();
session.close();
}
那么,我做错了什么?如何删除用户,同时删除role,进行一次查询?
【问题讨论】:
-
我认为您的示例代码有误。此代码将正确删除用户。
-
感谢回复,但我的用户表有外键。这就是我得到异常的原因。
-
Delete from users u where u.userid=1 , this query delete use rand execute 正确,我不知道你为什么说得到这个异常?我认为当删除角色时你会得到这个异常