我尝试在域类中运行全部删除,其中我限定了一个类属性值(Member.submissionId和submission.id作为长类型)。
这是我的代码:
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通过其submissionId属性(它属于另一个对象)具有指向Submission的软链接。
有什么建议吗?
编辑:另外,我是否正确假设此删除方法不是由于它生成的SQL而导致的级联删除?即不会删除属于所选成员的对象。
答案 0 :(得分:1)
看起来'member'是HQL中的保留字。如果不是很麻烦,我建议更改域名模型名称。
答案 1 :(得分:1)
您可以通过自己将查询编写为HQL查询来避免生成错误的HQL:
Member.executeUpdate("delete Member m where m.submissionId = :subId", [subId: submission.id])