나는 학생이 들어있는 그룹이 들어있는 학교가 있습니다."grand children"요소를 모두 제거하는 Hibernate HQL 질의를 작성하는 방법?
특정 학교의 모든 학생을 삭제하고 싶습니다.
SQL에서 나는 다음과 같은 쿼리를 작성할 수 있습니다
DELETE FROM students1
WHERE students1.group_id IN
(SELECT id FROM group1 WHERE group1.school_id = :school_id)
방법 HQL을 최대 절전 모드로 전환이 SQL 쿼리를 변환 할 수 있습니까?
나는 H2 데이터베이스 엔진을 사용합니다.
(내 실제 검색어는 더 복잡하고 간단한 계단식 삭제가 적합하지 않습니다.)
이String hql="delete from Student where group.school=:school";
session.createQuery(hql).setParameter("school", schoolObject).executeUpdate();
흠, 바로 가기를 찾고 있습니까? 이 쿼리를 HQL로 직접 변환 할 수 있기 때문입니다. Hql은 IN 조건을 지원합니다. –
@ doc_180 HQL에서'students.group.school.id'를 시도했지만 작동하지 않습니다. 자바 테이블 클래스는 학생과 관계가 있습니다 : @ManyToOne @JoinColumn (name = "group") private 그룹 그룹; SQL의 경우 간단히 ID를 사용할 수 있지만 클래스 이름을 사용하여 참조해야하는 Java 클래스에서이 작업을 수행하지는 못했지만이 작업은 자주 수행해야하며 사소한 솔루션이어야합니다. – sergtk
네, 사소한 문제가 있습니다. 해결책. student.group.school.id를 사용하지 마십시오. 엔티티들 사이에는 관계가 있으므로 in 절에있는 엔티티를 직접 사용하십시오. Student.group (학교에서 선택) 그룹에서 g 선택 –