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

从LocalDate开始的按月/年分组的Hibernate查询

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

    我有一个实体类

    @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

    注: 我已经实现了自定义的物理命名策略,所有表的前缀都是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);
    

    现在在代码中,我不想编写本机查询,而是想在hibernate中编写一些东西。我试过用 Criteria extract 当我使用日期字段时,它不应用命名策略,最终 EXTRACT(DAY FROM date) date .

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

    1 回复  |  直到 7 年前
        1
  •  0
  •   peach    7 年前

    @Query("select new my.package.MyDto("
            + "entity.status, "
            + "month(entity.date), "
            + "count(entity.status)) from MyEntity entity"
            + "where month(entity) = 12 "
            + "group by entity.status, month(entity.date) ")
    List<MyDto> findGroupedByStatusInDecember();
    

    你试过类似的东西吗?