从LocalDate按月/年按组查询休眠

时间:2019-01-07 13:36:38

标签: hibernate spring-data hibernate-criteria

我有一个实体类

@Entity

public class Status{

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator="STATUS_SEQ")
    Long id;

    String  statusValue;

    @Convert(converter = LocalDateConverter.class)
    LocalDate date;


    //some other attributes
    //getter and setters

}

statusValue可以包含OPEN,CLOSE,NEW,HOLD,INPROGRESS等不同状态

注意:我还实现了自定义物理命名策略,即为所有表添加前缀t_,为所有列添加前缀c_,因此数据库和实体中的列名不是sam

问题:我正在尝试查找不同状态下一个月的日期明智计数。我用SQL编写了以下查询。

SELECT c_status_value,
  EXTRACT(DAY FROM c_date),
  COUNT(this_.c_status_value)
FROM t_status
WHERE 
EXTRACT(MONTH FROM c_date) = 12
GROUP BY c_status_value,EXTRACT(DAY FROM c_date);

现在在代码中,我不想编写一个本机查询,但想在休眠状态下写一些东西。我尝试使用Criteria,但是在extract中使用日期字段时,它未应用命名策略,最终EXTRACT(DAY FROM date)无效,因为数据库中没有字段为date

criteria.add(Restrictions.sqlRestriction("EXTRACT(MONTH from {alias}.date) = (:?)", month,tipos));

我也乐意接受任何可以每天为我提供结果的解决方案。

1 个答案:

答案 0 :(得分:0)

在您的JpaRepository工作时,您只需在您的存储库中添加一个函数

Project NATURAL JOIN Workon

您尝试过类似的事情吗?