对于mysql,我写了一个像
这样的查询SELECT * FROM mytable GROUP BY DATE(dateTimeField)
但我不能在JPQL中使用DATE()
函数。
任何人都知道如何解决这个问题?
答案 0 :(得分:3)
对于Hibernate:
建议1:
使用cast(dateTimeField as date)
。请参阅here。
建议2:
您可以尝试连接year
,month
和year
HQL expressions。
查看this testcase的第360行。
str(year(current_date))||'-'||str(month(current_date))||'-'||str(day(current_date))
但是花点时间看看生成的SQL,它可能(也可能会)丑陋而且速度慢。
答案 1 :(得分:2)
如果你在底层使用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)
答案 2 :(得分:1)
如果您使用的是EclipseLink,可以使用JPQL中的FUNC()
函数来调用特定的数据库函数:
答案 3 :(得分:0)
我担心这超出了JPQL提供的范围。您将不得不诉诸本机查询。
以下是JPQL中的可用功能列表:
Java EE Tutorial 6 > Persistence > JPQL > Functional Expressions