使用JPA CriteriaBuilder API將字段(例如'2017-09-27')保存到mySQL Date
列時,結果不同(例如'2017- 09-26' )。如何在保存到mySQL數據庫時阻止LocalDate更改
我已驗證我的數據庫的時區設置爲UTC,使用SELECT TIMEDIFF(NOW(), UTC_TIMESTAMP)
作爲結果'00:00:00'。
我在本地測試這個,我有GMT + 2的時區,所以我懷疑當轉換髮生從LocalDate
到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();
的Java'LocalDate'對象不會存儲時間或時區信息(請參閱[Javadoc](https://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html)],我懷疑是否有其他內容。 –
您可以嘗試運行以下命令來確認你的MySQL服務器時區:'SELECT @@ system_time_zone,NOW(),UTC_TIMESTAMP()' –
@TimBiege leisen結果是'UTC | 2017-09-27 11:28:51 | 2017-09-27 11:28:51'。 – Phobos