grails - Grails 2.4.4 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 confirmPassword
    String state
    String extent
    String movileNumber
    String email
    String address
    Rol rol



    static constraints = {

    }

    static mapping = {

    }
}

这是我的 Controller 的代码。
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>

然后,当我提交表格时,我得到这个错误。
在GSP中,当我打印数据时,
Exception evaluating property 'dateBreak' for java.util.Arrays$ArrayList, Reason: groovy.lang.MissingPropertyException: No such property: dateBreak for class: java.sql.Timestamp 

有人可以告诉我如何使用executeQuery在grails中联接表,也很高兴学习withCriteria

最佳答案

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,这是一个细微的变化,并使用实际的域对象进行联接

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

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

除此之外,您还可以像这样将实际查询作为原始sql查询放入
def sql=new Sql(dataSource)
return sql.rows(query,whereParams)

关于grails - Grails 2.4.4 executeQuery()从数据库表联接表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43241118/

相关文章:

grails - Grails Javamelody插件警告

java - 如何获得缩写时区?

grails - 可为空的Grails hasMany列表

grails - 可以使用Grails的派生属性检索域对象吗?

sql-server - select语句的执行结果

grails - 从数据库发送任何类型的javaMail附件

grails - 将依赖关系解析限制为自定义存储库

mongodb - gorm-Grails MongoDB在执行addTo/removeFrom时未更新列表

c# - 如何在 SQL 选择期间通过 LINQ 数据上下文将 INT32 转换为 INT?

oracle - 每次 EXECUTE IMMEDIATE 后都需要 COMMIT 吗?