如何仅根据 JPQL 中的日期时间字段按日期进行分组

发布于 2024-12-05 14:59:58 字数 185 浏览 1 评论 0原文

对于 mysql,我编写了一个查询,例如

SELECT * FROM mytable GROUP BY DATE(dateTimeField)

But i can't use the DATE() function in JPQL。 有人知道如何解决这个问题吗?

For mysql I wrote a query like

SELECT * FROM mytable GROUP BY DATE(dateTimeField)

But i can't use the DATE() function in JPQL.
Anyone have an idea how to resolve this problem?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

伪装你 2024-12-12 14:59:58

如果您在后台使用 Hibernate,您可以尝试:

  1. 使用自定义函数创建您自己的方言

    公共类 CustomPostgresqlDialect 扩展 PostgreSQLDialect {   
        公共 CustomPostgresqlDialect() {
            极好的();
            registerFunction("截断日期",
            新 SQLFunctionTemplate( StandardBasicTypes.TIMESTAMP, "DATE(?1)" ));
        }
    }
    
  2. persistence.xml中注册您的方言

    <属性名称=“hibernate.dialect”值=“my.own.CustomPostgresqlDialect”/>
    
  3. 在 JPQL 中使用您的函数。

    通过 truncate_date(p.dateCreated) 从 Post p 组中选择 p
    

If You use Hibernate under the hood you can try :

  1. Create your own dialect with custom function

    public class CustomPostgresqlDialect extends PostgreSQLDialect {   
        public CustomPostgresqlDialect() {
            super();
            registerFunction("truncate_date",
            new SQLFunctionTemplate( StandardBasicTypes.TIMESTAMP, "DATE(?1)" ));
        }
    }
    
  2. Register Your dialect in persistence.xml

    <property name="hibernate.dialect" value="my.own.CustomPostgresqlDialect"/>
    
  3. Use your function in JPQL.

    select p from Post p group by truncate_date(p.dateCreated)
    
雾里花 2024-12-12 14:59:58

对于 Hibernate:

建议 1:

使用 cast(dateTimeField as date)。请参阅此处

建议2:

您可以尝试将连接起来 HQL 表达式

看一下此测试用例的第360行。

str(year(current_date))||'-'||str(month(current_date))||'-'||str(day(current_date))

但花点时间看看生成的 SQL,它可能(而且可能会)丑陋且缓慢。

For Hibernate:

Suggestion 1:

Use cast(dateTimeField as date). See here.

Suggestion 2:

You can try to concatenate year, month and year HQL expressions.

Take a look at line 360 of this testcase.

str(year(current_date))||'-'||str(month(current_date))||'-'||str(day(current_date))

But take the time to see the generated SQL, it may (and probably will be) ugly and slow.

2024-12-12 14:59:58

如果您使用 EclipseLink,则可以使用 JPQL 中的 FUNC() 函数来调用特定的数据库函数:

支持使用 FUNC 的本机数据库函数

If you are using EclipseLink you can use the FUNC() function in JPQL to call a specific database function:

Support for Native Database Functions Using FUNC

只怪假的太真实 2024-12-12 14:59:58

恐怕这超出了 JPQL 提供的范围。您将不得不求助于本机查询。

以下是 JPQL 中可用函数的列表:

Java EE 教程 6 >坚持> JPQL>函数表达式

I'm afraid that's beyond the scope of what JPQL offers. You will have to resort to native queries.

Here's the List of available functions in JPQL:

Java EE Tutorial 6 > Persistence > JPQL > Functional Expressions

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文