如何在grails中使用左连接?

时间:2018-04-18 07:56:34

标签: grails gorm

我有以下查询,它在mysql中获取正确的结果,当我在grails中写入相同的查询时,它会抛出错误"期望加入的路径"

select u.username,u.transactioncode,count(distinct t.rolename) roles
from user u 
left join transaction t on u.transactioncode=t.transactioncode 
group by u.username, u.transactioncode; 

How to change the query?

Modifying the query to make it work in grails

function(int id)
 {
   def sql = new Sql(dataSource)
        def output = sql.rows("select 
        u.username,u.transactioncode,count(distinct t.rolename) roles from 
        user u left join transaction t on 
        u.transactioncode=t.transactioncode where u.userid=:id group by 
        u.username, u.transactioncode")
       sql.close();
 }

 It throws an error in the where condition You have an error in your SQL 
 syntax; check the manual that corresponds to your MySQL server version for 
 the right syntax to use near ':id.

1 个答案:

答案 0 :(得分:1)

我认为最简单的方法是使用Groovy SQL。为此,您应该将dataSource注入您的服务或控制器:

import javax.sql.DataSource

DataSource dataSource

然后执行类似

的查询
new Sql(dataSource).rows(q)

q将成为您的确切查询。

Here是使用Grails的Groovy SQL的一个很好的教程。

我甚至不知道是否可以在内联HQL中使用左连接 - 这就是executeQuery应该使用的内容。正如@JMa所提到的,Criterias将是一个有效的选项,但它们 - 我认为 - 通常用于查询域对象,您需要自定义结果集。 This是何时在Grails中使用不同类型的查询选项的另一个很好的解释。