【发布时间】:2015-01-30 20:14:18
【问题描述】:
我想获取带有create_date = :my_date 的对象,其中create_date 是2014-12-02 14:49:15.029 格式,my_date 是JPA 中的2014-12-02 格式。
有什么方法可以使用NamedQuery 将时间戳列与 JPQL 中的 Date 对象(yyyy-MM-dd 格式)进行比较,或者我应该使用本机查询吗?
【问题讨论】:
我想获取带有create_date = :my_date 的对象,其中create_date 是2014-12-02 14:49:15.029 格式,my_date 是JPA 中的2014-12-02 格式。
有什么方法可以使用NamedQuery 将时间戳列与 JPQL 中的 Date 对象(yyyy-MM-dd 格式)进行比较,或者我应该使用本机查询吗?
【问题讨论】:
如果你正在使用 jpql 尝试使用
date(timestamp_column)
例如:
@Query(select te from Testentity te where date(te.createdTimestamp) >= CURRENT_DATE)
public List<Testentity> getTestDate()
【讨论】:
可以使用NamedQuery,需要正确操作@Temporal注解和TemporalType枚举。
因此,如果您的对象属性是没有时间部分的日期,您可以将其注释为 @Temporal(TemporalType.DATE),然后在为命名查询提供参数时,您将使用两个可用签名之一
setParameter(String name, java.util.Date value, TemporalType temporalType)
setParameter(String name, java.util.Calendar value, TemporalType temporalType)
所以您的查询将包含如下部分:
query.setParameter("my_date", myDate, TemporalType.DATE)
【讨论】: