1

クラス属性値の 1 つを修飾するドメイン クラスですべて削除を実行しようとしています (Member.submissionId と submit.id の両方を long 型として)。

これが私のコードです:

def memberCount = Member.where{ eq( "submissionId", submission.id ) }.deleteAll()

これが私が得る例外です:

nested exception is org.hibernate.hql.ast.QuerySyntaxException: unexpected token: member near line 1, column 57 [DELETE my.domain.Member member WHERE (member.submissionId=?)]

送信オブジェクトを参照している他の削除は正常に機能しているようです:

def subErrorCount = SubmissionError.where{ eq( "submission", submission ) }.deleteAll()

この削除では、生成された SQL は正しいです。

delete from submission_error where submission_id=?

私が見ることができる唯一の違いは、SubmissionError が親 Submission オブジェクトに属していることです。ここで、Member はその submitId 属性を介して Submission へのソフト リンクを持っています (それは別のオブジェクトに属しています)。

助言がありますか?

編集: また、この削除メソッドは、それが生成する SQL のためにカスケード削除ではないと仮定して正しいですか? つまり、選択したメンバーに属するオブジェクトは削除されません。

4

2 に答える 2

1

クエリをHQLクエリとして自分で作成することで、不適切に生成されたHQLを回避できます。

Member.executeUpdate("delete Member m where m.submissionId = :subId", [subId: submission.id])
于 2013-03-06T16:15:19.723 に答える