質問

私はこれまでのところ成功せず、@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アノテーションを脱いで、ちょうどロングPARENTIDでそれを置き換えることによって、仕事に削除取得することができました。それから私は、サブフィールドの代わりに親の名前を使用することを選択し変更します。

今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