【问题标题】:Compare current Date time in JPA query比较 JPA 查询中的当前日期时间
【发布时间】:2012-07-27 10:45:16
【问题描述】:

我想将数据库中的日期与 JPA 查询中的当前日期时间进行比较:

captureLimitDate

我的要求如下:

database.captureLimitDate : 04/07/2012 19:03:00 当前日期时间:04/07/2012 20:03:00

我的 JPAQuery 是这样的:

SELECT o FROM Operation o"
+ " WHERE ( o.merchantId =:merchantId ) AND "
+ "(o.captureLimitDate < currentDateTime ) ";

Operation 类的 captureLimitDate 为 java.util.Date

    @Generated(value = "XA", comments = "0,_8BedAMXZEeGHf_Dj4YaPyg")
     private Date captureLimitDate;

我想比较当前日期和时间。上述查询是否有效。 ??

【问题讨论】:

  • 你的单元测试说明了什么?

标签: java jpa


【解决方案1】:

CURRENT_TIMESTAMP 必须用于引用 JPQL 查询中的当前日期和时间:

select o from Operation o
where o.merchantId = :merchantId
and o.captureLimitDate < CURRENT_TIMESTAMP

如果当前日期和时间实际上是来自用户输入的日期(因此不是当前日期和时间,那么您可以像处理 merchantId 一样执行此操作:

select o from Operation o
where o.merchantId = :merchantId
and o.captureLimitDate < :maxDateTime

你设置参数使用

query.setParameter("maxDateTime", maxDateTime, TemporalType.TIMESTAMP);

【讨论】:

  • currentDateTime 将是用户输入,作为查询的参数。在这种情况下要做什么?
【解决方案2】:

JPA 定义了特殊的 JPQL 表达式,当查询被执行时,这些表达式被计算为数据库服务器上的日期和时间:

CURRENT_DATE - 计算为当前日期(java.sql.Date 实例)。

CURRENT_TIME - 被评估为当前时间(java.sql.Time 实例)。

CURRENT_TIMESTAMP - 评估为当前时间戳,即日期和时间 (java.sql.Timestamp 实例)。

更多信息:Click here

【讨论】:

    猜你喜欢
    • 2015-10-27
    • 2019-09-26
    • 1970-01-01
    • 2020-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-18
    • 1970-01-01
    相关资源
    最近更新 更多