2017-04-27 18 views
1

가입 할 수 있습니다. 지금까지는 SELECT를 위해 잘 작동합니다.우리는이 관계가 테이블

는 이제 JQL 질의

DELETE FROM RuleProviderEntity WHERE ... 

있다하지만이 RuleEntity 행을 삭제 계단식으로 실패합니다. RuleProviderEntity을 삭제하고 RuleEntity은 그대로 둡니다.

이것은 JPA 2에서 작동 할 예정이며 최대 절전 모드 버그입니까, 아니면 구성에서 뭔가 빠졌습니까?

@JoinTable을 추가 할 수 있지만 기본 설정보다 우선 적용됩니다.
orphanRemoval도 여기에 필요하지 않습니다.
어쩌면 @PreRemove으로 해결 방법을 시도 할 수 있지만 확실하지는 않습니다.

답변

3

JPQL 대량 삭제 쿼리가 실행된다는 의미입니까? em.remove() 대신.

대량 삭제 쿼리는 계단식 의미론을 존중하지 않으며 관리 대상 개체를 데이터 저장소와 일관된 상태로 유지하지도 않습니다. 계단식 연결을 원하면 em.remove()으로 전화하십시오. 이 JPA 스펙을 보면 의심 스럽다면

+0

감사합니다. 나는 지금까지 일괄 삭제를 사용하지 않았다. 그래서 나는 결코 알지 못했다. :) 그러나 스펙은 선택적 캐스 케이 딩 (cascading)을 요구하지 않는다는 것에 상당히 놀랐다. –

+0

내 사고 방식은 다음과 같습니다 : 'RuleEntityProvider'와 동일한 대량의 DELETE와 일치하는 엔티티가있을 수 있습니다. 그것에 대해'em.remove()'를 호출하면 캐스 캐 이드되고 3 단계 중첩 된'RuleEntity' 엔티티도 제거됩니다. 그렇다면 왜 DELETE 문을 계단식으로 사용하지 않을까요? –

+0

모든 계단식을 선택 사항으로 사용해야하는 이유를 알아보십시오. 일괄 삭제는 데이터 저장소에서 데이터를 가져 오지 않고 대량 작업을 수행 할 수 있으며 JPA 공급자는 JPA 공급자가 삭제되는 모든 개체를 통과해야하며 계단식을 처리 한 다음 해당 항목을 삭제해야하므로 수행 할 수 없습니다. –