代码之家  ›  专栏  ›  技术社区  ›  Pasha

如何将查询转换为HQL?

  •  0
  • Pasha  · 技术社区  · 7 年前

    我在SQL Server中有一个查询,它使用两个参数 startDate endDate .

    你能帮我把它转换成HQL,使它独立于数据库吗?

    SELECT LeaseTable.CarMake, AVG(LeaseTable.LeaseHours)
    FROM
    (SELECT lease.carmake, 
        DATEDIFF(HH, case when lease.startDate <@startdate then @startdate else lease.startDate end, dateadd(DD, 1 ,case when lease.endDate > @endDate then @endDate else lease.endDate end)) as LeaseHours
        FROM lease
    where 
        lease.startDate <= @endDate AND lease.endDate >= @startdate) as LeaseTable
    GROUP BY LeaseTable.carMake 
    
    0 回复  |  直到 7 年前
        1
  •  0
  •   Punit Tiwan    7 年前

    由于JPQL不支持子查询,因此必须调整查询以获得结果

    可以这样编写查询

    String query = "SELECT l.carMake ,"
             + "         AVG("
             + "           DATEDIFF("
             + "             HH,"
             + "             CASE WHEN lease.startDate <:startdate THEN :startdate ELSE lease.startDate end,"
             + "             dateadd(DD, 1 ,case WHEN lease.endDate > :endDate THEN :endDate ELSE lease.endDate end)"
             + "            )"
             + "         )"
             + " FROM lease l"
             + " WHERE l.startDate <= :endDate AND l.endDate >= :startdate"
             + " GROUP BY  l.carMake; ";
    

    基本上,将date_diff函数从子查询中取出,放入AVG函数