String query = "Delete From RolesMap R where R.users.id= :id";
entityManager.createQuery(query).setParameter("id", id).executeUpdate();
String hql = "Delete From Users U where U.id= :id";
entityManager.createQuery(hql).setParameter("id", id).executeUpdate();
RolesMap和Users是相关的表,我想要一个用户,但是在此之前,我必须从RolesMap中删除他的角色,任何建议如何写一个查询而不是两个查询
答案 0 :(得分:0)
我看到您正在使用JPA接口(EntityManager)而不是Hibernate Session。但是由于您使用Hibernate标记了问题,所以我认为这是您的JPA实现。基于这种假设,您可以使用休眠的OnDelete批注
@Entity
public class RolesMap {
@org.hibernate.annotations.OnDelete(action = org.hibernate.annotations.OnDeleteAction.CASCADE)
private Users users;
}
在我使用的休眠版本(5.1.1-FINAL)中,这导致DB模式更改,其中用户外键添加有“ ON DELETE CASCADE”。
ALTER TABLE roles_map
ADD CONSTRAINT fkm5m5bko6kbt1q4gfibylhttaw FOREIGN KEY (users_id)
REFERENCES users(id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE CASCADE;
从users表中删除该条目时,roles_map中的相应条目也将被删除。