使用 JPA CriteriaBuilder API将LocalDate
字段(例如“2017-09-27”)保存到 mySQLDate
列时,结果不同(例如“2017-09-26”)。
我已经验证我的数据库的时区设置为 UTC,SELECT TIMEDIFF(NOW(), UTC_TIMESTAMP)
因为结果是 '00:00:00'。
我在本地对此进行测试,并且我的时区为 GMT + 2,所以我怀疑当从LocalDate
to发生转换时,Date
将扣除 2 小时并在请求日期前 1 天生成一个日期(假设该LocalDate
字段为由于没有时间信息,因此被视为 00:00:00。
在这种情况下保存 LocalDates 的最佳方法是什么?我是否应该遵循此处的建议https://stackoverflow.com/a/29751575/3832047并将所有 LocalDate 字段明确设置为 UTC 或类似的东西?
我进行了测试,看看在代码中转换它们时会发生什么,并得到以下结果:
Date convertedDate = Date.valueOf(localDate);
编辑
这是我用来检索数据的代码示例,其中也发生了奇数日期更改。如果我请求 的数据2017-06-27
,我会收到 的结果2017-06-26
。
CriteriaBuilder criteriaBuilder = sessionFactory.getCriteriaBuilder();
CriteriaQuery criteriaQuery = criteriaBuilder.createQuery(HorseAndTrailerRequest.class);
Root<HorseAndTrailerRequest> criteria = criteriaQuery.from(HorseAndTrailerRequest.class);
ParameterExpression<LocalDate> effectiveDateParameter = criteriaBuilder.parameter(LocalDate.class);
criteriaQuery.select(criteria)
.where(
criteriaBuilder.equal(criteria.get("effectiveDate"), effectiveDateParameter)
);
TypedQuery<HorseAndTrailerRequest> query = sessionFactory.getCurrentSession().createQuery(criteriaQuery);
query.setParameter(effectiveDateParameter, date);
return query.getResultList();