我需要使用条件生成以下查询..怎么办?
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;
答案 0 :(得分:0)
您没有指定数据库,但Hibernate可能不会支持date_format
。
如果你真的想通过Criteria完成它,你可能需要实现自己的Criterion进行比较,Projection进行group by
。
你也可以使用HQL和你需要实现的自定义方言来支持date_format
您可能最好在此处编写本机SQL查询。 Hibernate为您提供所需的一切。
答案 1 :(得分:0)
首先,我可能不会使用此标准。当必须基于可变搜索条件动态生成查询时,条件很有用。您的查询是完全静态的,不返回实体而是标量,并且您已经拥有它。为什么不使用SQL查询?如果您不想对表名和列名进行硬编码,请至少进行HQL查询。
如果标准出于某些不明原因,是执行此查询的唯一可接受方式,我不会在SQL中格式化查询结果。我会用Java来做,这至少会使select和group by子句更容易生成。
唯一困难的是日期格式。但是等等,您的查询选择必须全部在当月的行。所有返回的行将具有相同的格式化日期。那么,为什么要首先选择呢?
事实上,您的查询可以按原样重写:
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中执行变得简单。