gpt4 book ai didi

java - JPA CreateNativeQuery 返回错误的日期

转载 作者:行者123 更新时间:2023-11-29 06:03:11 26 4
gpt4 key购买 nike

我们最近将一个项目从使用 Hibernate 4 更新为 Hibernate 5.2,随之而来的是需要更新我们所有的标准以使用 JPA。大多数情况下一切正常,但我有一个查询不再运行。我们正在查询的表上的字段之一是数据库中的 DATE 类型。

当我直接在表上查询时,我得到了日期 - 说它是“2017-04-20”。但是,当我使用 JPA 的 createNativeQuery 在我们的开发服务器上运行相同的查询时,我得到了日期“2017-04-19”

我认为这不是查询的问题,因为我通过 mysql 终端和 java 运行完全相同的查询并得到不同的结果。我运行的查询是在下面的示例中记录的查询。我认为这可能是时区问题,因为我在本地环境中没有这个问题,只是在我的开发服务器上,但在我们更新到新版本的 Hibernate 之前它也不是问题。

public List<ResponseDTO> getDashboardData(String date, Integer page, Integer pageSize, AbstractDashboard dashboard) {
List<ResponseDTO> processed = new ArrayList<ResponseDTO>();
String query = getDashboardQuery(date, dashboard);
logger.info("Dashboard Query: " + query);
List<Object[]> raw = createNativeQuery(query).getResultList();

return raw.stream().map(r->new ResponseDTO(r)).collect(Collectors.toList());
}

还有我的 DTO 对象的构造函数:

public ResponseDTO(Object[] r) {
this.date = ((Date) r[0]).toLocalDate();
System.out.println(this.date.toString());//This date does not match what is in the db.

this.type = (String) r[1];
this.label = (String) r[2];
this.value = (Double) r[3];
}

编辑:

我认为这实际上是 java.sql.Date 类型的问题,因为我尝试在我的开发服务器上打印它,它也返回“2017-04-19”而不是 20 号。当我在 mysql 控制台中运行查询时,我不明白为什么这与结果不匹配,看起来它们对我来说应该是一样的。

最佳答案

尝试另一个 JDBC 驱动程序

好的,我让它工作了。对于它的值(value),这对我来说似乎完全是疯狂的。 “啊哈!”阅读的时刻来了this answer to a different question.

因为是 mysql 驱动程序决定了系统中日期的解析方式。我回滚了我的 mysql 驱动程序,因为它是我更新的软件包之一。突然间一切都按预期进行。

关于java - JPA CreateNativeQuery 返回错误的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43526066/

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