문제

그렇다면 구문은 무엇입니까?

FOO 인스턴스가 모든 막대의 모든 인스턴스와 관련이 없다고 가정합니다. SQL에서는 단순히 다음과 같습니다.

delete from FOO_BAR_MAPPING
where FOO_ID = ?

HQL에서는 다음과 같은 것일 것이라고 생각했습니다.

delete from Bar.foos foos
where foos.id = :id

(FOOS가 FOO의 매핑 된 모음 인 곳)

그러나 틀린 것 같습니다.

org.hibernate.hql.ast.QuerySyntaxException: Bar.foos is not mapped

HQL에서도 가능합니까?

도움이 되었습니까?

해결책

귀하의 구체적인 질문에 답하기 위해, HQL에서는 불가능하다는 것을 알고 있습니다.

나는 당신이 SQL과 HQL을 조금 혼합하고 있다고 생각합니다. SQL에서는 실제로 레코드를 "삭제"하며 물론 최대 절전 모드도 궁극적으로 그렇게 할 것입니다. 그러나 최대 절전 모드/HQL은 객체 지향 사고 방식에서 설계 되었으므로이 맥락에서 "삭제"는 연관성이 아닌 개체를 삭제한다는 것을 의미합니다. 일반적으로 당신은 다음과 같은 일을합니다.

Foo f = session.get(Foo.class, id);
f.getBars().clear();
session.merge(f);

이것은 당신이 지정한 ID에 의해 객체를 검색하고, 컬렉션을 지우면 모든 막대 연결을 제거합니다. 분명히 당신은 Foo-Bars 협회가 작동하기 위해 적절한 방향으로 매핑되어야합니다.

다른 팁

HQL에서는 연관성을 제거하는 것만으로는 불가능합니다. 그러나 당신이 할 수있는 일은 다음과 같습니다.

a) 단일 foo를 위해 그것을하고 있다고 가정하면 캐스케이드가 적절하게 설정되었다고 가정하면로드 할 수 있습니다. Foo 예를 들어, 수집을 지우십시오 bars 그리고 그것을 저장하십시오.

b) 당신이 지우려고한다면 bars 다중 Foos HQL 대신 SQL 쿼리를 매핑 할 수 있습니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top