gpt4 book ai didi

java - Hibernate:使用 LocalDateTime 查询范围

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:15:07 27 4
gpt4 key购买 nike

我正在使用带有 hibernate-java8 插件的 hibernate 5 来使用 LocalDateTime领域。我现在有一个实体,它有一个日期字段和一个用户字段,如下所示:

@Entity
public class Transaction {
// ...
private User user;
private LocalDateTime date;
// ..
}

现在我只想查询某个用户在一定时间范围内的所有交易。所以我使用以下查询:

SELECT t FROM Transaction t WHERE t.user = :owner AND t.date BETWEEN :from AND :to

很奇怪,这个查询没有给我任何结果。我也尝试使用 <>运营商,但这也无济于事。当我省略时间范围部分时,我得到了用户的正确交易列表。当我在 MySQL 工作台中执行由 Hibernate 生成的 SQL 查询时,我也得到了预期的结果。我使用以下代码片段执行(命名)查询:

public <T> List<T> findList(Class<T> type, String queryName,
Map<String, Object> params) {
final EntityManager em = this.entityManager.get();
final TypedQuery<T> query = em.createNamedQuery(queryName, type);
params.forEach(query::setParameter);
return query.getResultList();
}

这简单地称为提供上面列出的查询和命名参数的映射,例如:

findList(Transaction.class, Transaction.BY_USER_AND_RANGE,
ImmutableMap.of("owner", owner, "from", from, "to", to));

在我的测试用例中,持久化了一个包含当前日期的事务,并为查询创建了从昨天到明天的范围。检查 MySQL Workbench 中的表显示事务存在并且日期字段具有正确的类型并包含正确的值。然而,我的查询不会给我任何结果。

有什么我遗漏的吗?

最佳答案

你作为参数传递的日期也应该是

LocalDateTime see the example code below might help you

LocalDate date = LocalDate.of(2015, 8, 11);
TypedQuery<MyEntity> query = this.em.createQuery("SELECT e FROM MyEntity e WHERE date BETWEEN :start AND :end", MyEntity.class);
query.setParameter("start", date.minusDays(2));
query.setParameter("end", date.plusDays(7));
MyEntity e = query.getSingleResult();

关于java - Hibernate:使用 LocalDateTime 查询范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36957671/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com