JPA查询忽略时间的日期

标签 jpa jpa-2.0

假设您有一个带有java.util.Date字段的类。可能是“待办事项”类(class)或“事件策划者”类(class)。

@Temporal(TemporalType.TIMESTAMP)
private Date startTime;

这将映射到MySQL中的datetime列。

在某些情况下,您想确切地知道此事件的发生时间。 “什么预定于2011年8月11日晚上8点?”

有时您只想知道在特定日期计划了哪些事件。 “预定于2011年8月11日预定什么?”

如果您的JPAQL是:
SELECT blah blah etc. WHERE ti.startTime = :d1

并且该参数是java.util.Date实例:
query.setParameter("d1", date, TemporalType.DATE);

您的结果将受日期限制,而也受时间限制。

这是一个非常常见的用例,令我惊讶的是,即使在JPA 2.0中,也没有简单的方法可以做到这一点。

我宁愿不使用供应商特有的技巧,也不喜欢使用字符串/子字符串。

您是如何解决这个问题的?

最佳答案

我知道我来晚了,但是我找到了一种方法。
我正在使用像这样的jpql:

select s from S s where date(s.someDate) = :param

我将参数设置为:
query.setParameter("param", param, TemporalType.DATE);

我发现使用Criteria Query执行此操作的方式是:
builder.equal(
 builder.function("date", Date.class, root.get(S_.someDate)), 
 param
);

至少,使用MySql可以。

希望对您有所帮助。

关于JPA查询忽略时间的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7216473/

相关文章:

java - 在JPA中,有没有办法批量将数据插入数据库,并且仅在数据库中不存在时插入

java - Vaadin JPAContainer : ManytoOne relation with EmbeddedID

java - 如何通过在 glassfish 中部署的应用程序定义不同的连接池

java - Hibernate 从 hql 查询创建多个查询

hibernate - 是否有包括使用 JPA 或 Hibernate 的 Elastic Beanstalk 教程?

java - JPA persistence.xml - 从引用的库添加 DAO

java - 使用连接表的 JPA 一对多单向关系

java - JPA : Can we use different collection type on either sides of ManyToMany relationship?

spring - 使用 Junit 进行测试时,JPA EntityManager 值不会保留在数据库中

java - Hibernate/JPA 将 native 查询的结果映射到持有实体的非实体