Удаление строк связанных таблиц в одном запросе - PullRequest
0 голосов
/ 27 сентября 2018
    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 являются связанными таблицами, я хочу, чтобы пользователь, но перед этим мне придется удалить его роли из roleMap. Любое предложение, как я могу написать один запрос вместо двух

1 Ответ

0 голосов
/ 27 сентября 2018

Я вижу, что вы используете интерфейс 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, когда ForeignKey to Users добавляется с"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;

Когда запись удалена из таблицы пользователей, соответствующие записи из role_map также будут удалены.

...