使用适当的语法对HQL连接查询进行无效查询

时间:2017-11-15 14:36:17

标签: hibernate grails gorm

我有一个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

2 个答案:

答案 0 :(得分:1)

就像你说的那样,当你先删除SELECT时它会起作用。因为findAll方法只负责“来自FirstTable”之类的查询。 建议改用executeQuery。

在你的情况下,它会是这样的:

FirstTable.executeQuery("from FirstTable AS first, SecondTable AS second WHERE second.firstTable = first");

有关详情,请参阅以下链接:issues1428duplicate so

答案 1 :(得分:-1)

您正在尝试将整个表格选为列,也许您应该尝试以下操作:

  SELECT * FROM FirstTable AS first, SecondTable AS second WHERE second.firstTable = first;