Запрос гибернации для группы по месяцам / годам от LocalDate - PullRequest
0 голосов
/ 07 января 2019

У меня есть класс сущности

@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);

Теперь в коде я не хочу писать собственный запрос, но хочу что-то написать в спящем режиме. Я пытался использовать Criteria, но в том, что extract, когда я использую поле даты, он не применяет стратегию именования, и в итоге EXTRACT(DAY FROM date), который не работает, потому что в базе данных нет поля как date.

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

Я открыт для любого решения, которое может дать мне результаты в дневное время.

1 Ответ

0 голосов
/ 09 января 2019

Поскольку ваш JpaRepository работает, вы можете просто добавить функцию в свой репозиторий

@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();

Вы пробовали что-то подобное?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...