【问题标题】:SQL Query to Grails Hibernate对 Grails Hibernate 的 SQL 查询
【发布时间】:2013-12-12 20:45:39
【问题描述】:

在一位同事的帮助下,我设法获得了一个查询,以从如下所示的表中返回我想要的数据:

ID    APP_NAME    JVM_NAME    STARTUP_DATE    VERSION_FILE
1     appA        jvm1        xxx             1.3.23
1     appA        jvm2        xxx             1.3.23
1     appA        jvm1        xxx             1.3.23

查询如下:

SELECT b.*
  FROM ( SELECT app_name, jvm_name, MAX (startup_date) MDATE
         FROM application_log
         WHERE app_name = '${someValue}'
         GROUP BY app_name, jvm_name) a,
        application_log b
 WHERE a.app_name = B.APP_NAME
   AND a.jvm_name = b.jvm_name
   AND a.MDATE = b.startup_date;

我将${someValue} 替换为appA

我已将此表映射到 ApplicationLog Grails (2.3.4) 域对象,但是我试图弄清楚如何通过 Grails 实现此查询并将其直接映射回我的 POJO。

我的后备计划是,我会为提供的APP_NAME 获取一个不同的JVM_NAME 列表,然后循环遍历这些值。然后根据值查找具有匹配JVM_NAMEAPP_NAME 的行,结果按STARTUP_DATE 排序并应用LIMIT 1

欢迎提出任何建议。

干杯

【问题讨论】:

    标签: sql hibernate grails hql


    【解决方案1】:

    您应该能够将查询从原生 SQL 转换为 HQL。应该很相似。一个区别是 HQL 聚合不需要“GROUP BY”子句。我不确定这是否会按书面规定工作,但可能很接近......

    def hql = """SELECT b.*
      FROM ( SELECT app_name, jvm_name, MAX(startup_date) mate
             FROM application_log
             WHERE app_name = :someValue ) a,
           application_log b
     WHERE a.app_name = b.app_nae
       AND a.jvm_name = b.jvm_name
       AND a.mdate = b.startup_date"""
    
    def logs = ApplicationLog.executeQuery(hql)
    

    【讨论】:

      猜你喜欢
      • 2011-04-26
      • 1970-01-01
      • 2017-12-07
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 2014-12-15
      • 2014-07-15
      相关资源
      最近更新 更多