Grails deleteAll()因hibernate异常而失败

时间:2013-03-06 11:45:44

标签: hibernate grails gorm

我尝试在域类中运行全部删除,其中我限定了一个类属性值(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而导致的级联删除?即不会删除属于所选成员的对象。

2 个答案:

答案 0 :(得分:1)

看起来'member'是HQL中的保留字。如果不是很麻烦,我建议更改域名模型名称。

答案 1 :(得分:1)

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

Member.executeUpdate("delete Member m where m.submissionId = :subId", [subId: submission.id])