在单个查询中删除相关表的行

时间:2018-09-27 05:35:00

标签: hibernate jpa hql hibernate-entitymanager

    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中删除他的角色,任何建议如何写一个查询而不是两个查询

1 个答案:

答案 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中的相应条目也将被删除。