Grails 2.4.4 executeQuery()从数据库的表连接表

Grails 2.4.4 executeQuery()从数据库的表连接表,grails,gorm,executequery,Grails,Gorm,Executequery,这是我的域的代码 class Btr { Date dateBreak int timeBreak String typeBreak User usuario static constraints = { } static mapping = { } } class User { String name String user String password String confi

这是我的域的代码

class Btr {

    Date dateBreak
    int timeBreak
    String typeBreak
    User usuario

    static constraints = {
    }

    static mapping = {

      }
}


class User {

    String name
    String user
    String password
    String confirmPassword
    String state
    String extent
    String movileNumber
    String email
    String address
    Rol rol



    static constraints = {

    }

    static mapping = {

    }
}
这是我的控制器的代码

def df = new SimpleDateFormat("yyyy-MM-dd HH:mm")
def startDate = params.startDate
def stopDate = params.stopDate

resultado = Btr .executeQuery("select dateBreak, timeBreak, typeBreak, 
user, usuario.rol from Btr inner join User on user = usuario.rol where 
dateBreak between :startDate" and :stopDate", [startDate: 
df.parse(startDate), stopDate: df.parse(stopDate)])


render (view: "data", model: [result: resultado])
这是我的看法

  <g:each in="${result}" var="results" status="i">
    <tr><td>{results.dateBreak}</td><td>{results.timeBreak}</td><td>
    {results.typeBreak} </td><td>${results.usuario.rol}</td></tr>
    </g:each>
有人能告诉我如何用executeQuery连接grails中的表吗?如果能学会用Criteria连接表,那将是一件很好的事情

resultado = Btr .executeQuery("select dateBreak, timeBreak, typeBreak, 
user, usuario.rol from Btr inner join User on user = usuario.rol where 
dateBreak between :startDate" and :stopDate", [startDate: 
df.parse(startDate), stopDate: df.parse(stopDate)])
应该是

resultado = Btr .executeQuery("""select new map (btr.dateBreak as dateBreak, btr.timeBreak as timeBreak, btr.typeBreak as typeBreak, 
u as user, user.usuario.rol  as rol) from Btr btr join btr.user u where 
btr.dateBreak between :startDate and :stopDate""", [startDate: 
df.parse(startDate), stopDate: df.parse(stopDate)])
您拥有的是原始sql,而不是HQL,HQL只是一个微小的变化,它使用实际的域对象来连接

对hasMany使用左连接,对于典型的一对一关系,它可能是空连接

如果一对一关系可以为空,也可以使用左连接

除此之外,您还可以将实际查询作为原始sql查询,如下所示

def sql=new Sql(dataSource)
return sql.rows(query,whereParams)
应该是

resultado = Btr .executeQuery("""select new map (btr.dateBreak as dateBreak, btr.timeBreak as timeBreak, btr.typeBreak as typeBreak, 
u as user, user.usuario.rol  as rol) from Btr btr join btr.user u where 
btr.dateBreak between :startDate and :stopDate""", [startDate: 
df.parse(startDate), stopDate: df.parse(stopDate)])
您拥有的是原始sql,而不是HQL,HQL只是一个微小的变化,它使用实际的域对象来连接

对hasMany使用左连接,对于典型的一对一关系,它可能是空连接

如果一对一关系可以为空,也可以使用左连接

除此之外,您还可以将实际查询作为原始sql查询,如下所示

def sql=new Sql(dataSource)
return sql.rows(query,whereParams)