Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用hibernate条件中的函数获取查询?_Hibernate - Fatal编程技术网

如何使用hibernate条件中的函数获取查询?

如何使用hibernate条件中的函数获取查询?,hibernate,Hibernate,我需要使用条件生成以下查询。。怎么办 select worker_id,date_format(date,'%m-%Y'),sum(SalaryPerDay),sum(attendance) from tbl_attendance where worker_id is not null and date_format(date,'%m-%Y') = date_format(now(),'%m-%Y') group by worker_id, date_format(date,'%m-%Y')

我需要使用条件生成以下查询。。怎么办

select worker_id,date_format(date,'%m-%Y'),sum(SalaryPerDay),sum(attendance) from tbl_attendance
where worker_id is not null and  date_format(date,'%m-%Y') = date_format(now(),'%m-%Y')
group by worker_id, date_format(date,'%m-%Y')
order by date,worker_id

public class Attendance  {

    /**
     * 
     */
    private static final long serialVersionUID = 4917788836066742576L;
    private Integer attendanceId;
    private Date date;
    private Integer workerId;
    private Integer vehicleId;
    private Integer salaryId;
    private Double salaryPerDay;
    private Double attendance;
    private Double startingTime;
    private Double closingTime;

您没有指定数据库,但Hibernate可能不支持开箱即用的日期\格式。 如果您真的希望通过标准完成,您可能需要实现自己的标准,以便进行比较和分组

您还可以将HQL与自定义方言一起使用,您需要实现这些方言来支持date\u格式


似乎您最好在这里编写本机SQL查询。Hibernate为您提供了所需的一切

首先,我可能不会为此使用标准。当查询必须基于可变搜索条件动态生成时,条件非常有用。您的查询是完全静态的,不返回实体,只返回标量,您已经拥有了它。为什么不使用SQL查询呢?或者,如果您不想硬编码表名和列名,至少需要一个HQL查询

如果出于某种模糊的原因,条件是执行此查询的唯一可接受的方式,那么我不会用SQL格式化查询结果。我会用Java实现,这至少会使select和GROUPBY子句更容易生成

剩下的唯一困难是日期格式。但是,请稍候,您的查询选择的行必须全部在当前月份。所有返回的行将具有相同的格式化日期。那么,为什么首先选择它呢

因此,实际上,您的查询可以按原样重写:

select worker_id ,sum(SalaryPerDay), sum(attendance) from tbl_attendance
where worker_id is not null 
and date >= :startOfCurrentMonth, 
and date < :endOfNextMonth
group by worker_id
order by worker_id

突然间,在HQL或Criteria中执行变得很简单。

此查询将返回每个日期的记录。但我需要将其分组为月份。您最初的查询按工作人员和月份分组,但只对当前月份的一个月感兴趣。事实上,它是按工作者分组的,我的查询也是如此。