1

我正在尝试在我限定其中一个类属性值(Member.submissionId 和submission.id 作为长类型)的域类上运行 delete all。

这是我的代码:

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 中的保留字。如果不是很麻烦,我建议更改域模型名称。

于 2013-03-06T12:11:16.997 回答
1

您可以通过自己将查询编写为 HQL 查询来避免生成错误的 HQL:

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