Для mysql я написал запрос типа
SELECT * FROM mytable GROUP BY DATE(dateTimeField)
Но я не могу использовать функцию DATE()
в JPQL. Кто-нибудь знает, как решить эту проблему?
Для mysql я написал запрос типа
SELECT * FROM mytable GROUP BY DATE(dateTimeField)
Но я не могу использовать функцию DATE()
в JPQL. Кто-нибудь знает, как решить эту проблему?
Если вы используете Hibernate под капотом, вы можете попробовать:
Создайте свой собственный диалект с пользовательской функцией
public class CustomPostgresqlDialect extends PostgreSQLDialect {
public CustomPostgresqlDialect() {
super();
registerFunction("truncate_date",
new SQLFunctionTemplate( StandardBasicTypes.TIMESTAMP, "DATE(?1)" ));
}
}
Зарегистрируйте свой диалект в persistence.xml
<property name="hibernate.dialect" value="my.own.CustomPostgresqlDialect"/>
Используйте свою функцию в JPQL.
select p from Post p group by truncate_date(p.dateCreated)
cb.function("truncate_date", Date.class, fromTable.get("dateCreated"));
- person brntsllvn; 02.04.2019
Для спящего режима:
Предложение 1:
Используйте 1_. См. здесь.
Предложение 2:
Вы можете попытаться объединить year
, month
и year
Выражения HQL.
Взгляните на строку 360 этого теста.
str(year(current_date))||'-'||str(month(current_date))||'-'||str(day(current_date))
Но найдите время, чтобы увидеть сгенерированный SQL, он может быть (и, вероятно, будет) уродливым и медленным.
Если вы используете EclipseLink, вы можете использовать функцию FUNC()
в JPQL для вызова определенной функции базы данных:
Поддержка собственных функций базы данных с использованием FUNC
Боюсь, это выходит за рамки того, что предлагает JPQL. Вам придется прибегнуть к нативным запросам.
Вот список доступных функций в JPQL:
Java EE Tutorial 6 > Persistence > JPQL > Functional Expressions а>