문제

나는 지금까지 성공하지 않고 @manytoone 관계에서 대량 삭제를 실행하는 방법을 알아 내려고 노력하고 있습니다.

대본:

학부모는 많은 다운로드를 가지고 있으며, 부모 날짜가있는 모든 다운로드의 삭제를 실행하고 싶습니다. > :some_date. 부모 레코드를 삭제하고 싶지 않고 다운로드 레코드 만 삭제하고 싶지 않습니다. 다운로드에는 @manytoone 주석을 사용하여 매핑되는 상위 필드가 있습니다.

다운로드 엔티티에서 @NamedQuery를 사용하여이를 달성하려고합니다.

//this OQL tries to delete from both the child and parent tables
//I only want to delete from the Download table
DELETE FROM Download dwn 
    WHERE dwn.acctId = :acctId AND dwn.parent.date > :date

//this OQL is invalid and will keep the bean from deploying
//The example I found used this sub query but with a @OneToMany relationship
//instead of a @ManyToOne relationship
//this is what i get for an error on deployment:
//"Errors in named queries: deleteByAccountIdAndDownloadedDate"
DELETE FROM Download dwn WHERE EXISTS 
    (SELECT p from dwn.parent WHERE p.date > :date) 
    AND dwn.acctId = :acctId

제안이 있습니까?

도움이 되었습니까?

해결책 2

@manytoone 주석을 벗고 긴 부모로 대체하여 대량 삭제를 작동시킬 수있었습니다. 그런 다음 하위 선택을 변경하여 필드 대신 부모 이름을 사용하도록 변경했습니다.

이제 OQL은 다음과 같습니다.

DELETE FROM Download dwn WHERE EXISTS 
    (SELECT p FROM Parent p WHERE p.id = dwn.parentId and p.date > :date)

나는 그것을 시도하지 않았지만 (내가하고있는 일에 대한 쿼리 기능이 필요하지 않기 때문에) @manytoone을 남겨 두고이 OQL을 사용하기 위해 노력할 수 있다면 :

DELETE FROM Download dwn WHERE EXISTS 
    (SELECT p FROM Parent p WHERE p.id = dwn.parent.id and p.date > :date)

다른 팁

나는 첫 번째 접근법을 고수 할 것이다. 표시된 오류 메시지가 있습니까?

학부모 기록이 다운로드와 함께 삭제 될 때 ... 당신은 그들 사이의 관계에 캐스케이드가 없다고 확신합니까?

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