У меня есть класс сущности
@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));
Я открыт для любого решения, которое может дать мне результаты в дневное время.