我有一个HQL连接查询,如下所示
SELECT first FROM FirstTable AS first, SecondTable AS second WHERE second.firstTable = first;
以上查询返回无效查询。但是,如果我在没有SELECT first
的情况下使用相同的上述查询,那么它的效果非常好。我正在使用文档中正确的语法。有什么可能是我错过的错误或任何修复的想法吗?我正在使用Grails Dynamic finders来运行HQL,即
FirstTable.findAll(hql.toString(),params)
hql
是一个字符串构建器,我用它来构建包含所有必需参数的查询(param
)。
我得到的完整错误如下
org.codehaus.groovy.grails.orm.hibernate.exceptions.GrailsQueryException:无效查询[首先从SELECT FirstTable AS中选择,SecondTable AS第二个WHERE second.firstTable = first.id按first.id排序的第一个组] domain class [class com.model.FirstTable]
FirstTable
有一个OneToMany
映射到SecondTable
,而Secondtable
有一个OneToOne
映射到FirstTable
答案 0 :(得分:1)
就像你说的那样,当你先删除SELECT时它会起作用。因为findAll方法只负责“来自FirstTable”之类的查询。 建议改用executeQuery。
在你的情况下,它会是这样的:
FirstTable.executeQuery("from FirstTable AS first, SecondTable AS second WHERE second.firstTable = first");
有关详情,请参阅以下链接:issues1428或duplicate so
答案 1 :(得分:-1)
您正在尝试将整个表格选为列,也许您应该尝试以下操作:
SELECT * FROM FirstTable AS first, SecondTable AS second WHERE second.firstTable = first;