我有一个HQL联接查询,如下所示
SELECT first FROM FirstTable AS first, SecondTable AS second WHERE second.firstTable = first;
以上查询返回为无效查询。但是,如果我在不使用
SELECT first
的情况下使用上述相同查询,则效果很好。我正在使用文档中的正确语法。对我可能遗漏的错误或任何解决方法有任何想法吗?我正在使用Grails动态查找器来运行HQL,即FirstTable.findAll(hql.toString(),params)
其中
hql
是一个字符串生成器,我希望使用所有必需的参数(param
)来构建查询。我得到的完整错误如下
org.codehaus.groovy.grails.orm.hibernate.exceptions.GrailsQueryException: Invalid query [SELECT first FROM FirstTable AS first, SecondTable AS second WHERE second.firstTable = first group by first.id order by first.id] for domain class [class com.model.FirstTable]
FirstTable
具有到OneToMany
的SecondTable
映射,而Secondtable
具有到OneToOne
的FirstTable
映射
最佳答案
就像您说的那样,它在您首先删除SELECT时起作用。因为findAll方法仅负责诸如“来自FirstTable”的查询。
建议改用executeQuery。
在您的情况下,它将类似于:
FirstTable.executeQuery("from FirstTable AS first, SecondTable AS second WHERE second.firstTable = first");
有关更多详细信息,请参见以下链接:issues1428或duplicate so
关于hibernate - 使用正确语法的HQL联接查询上的无效查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47310153/