2016-09-03 32 views
2

我現在有一個奇怪的問題。當我將今天的日期插入到數據庫中時,它被映射到昨天的日期,它發生在每個日期。例如,當我嘗試插入2016-09-02時,數據庫將其保存爲2016-09-01。 這裏是我的映射:喬達時間 - 休眠插入昨天的日期到數據庫中

@DateTimeFormat(pattern="dd/MM/yyyy") 
@Column(name = "OrderDate", nullable = false) 
@Type(type="org.jadira.usertype.dateandtime.joda.PersistentLocalDate") 
private final LocalDate orderDate; 

創建由new LocalDate() 我想打印在控制檯右側的值時,之前它被保存到數據庫,並將其打印正確,但在數據庫中的值是前一天:/ 所以這個問題要麼是用hibernate映射,要麼用mysql。 我保存日期到數據庫中此方法:

@Autowired 
    private SessionFactory sessionFactory; 
    public void persist(T entity) { 
     getSession().persist(entity); 
    } 

我甚至不知道是否與休眠,或MySQL的問題。這真的很奇怪。你能給我指點什麼可能是錯的?在此先感謝 MySQL的IM的版本使用:5.7.14日誌

編輯:當我手動插入數據在MySQL中是這樣的:

insert into Orders values (149,14,'2016-09-03','2016-09-03',199.99) 

日期正確保存

我的SQL設置: http://pastebin.com/87d6pkmE

我啓用了MySQL的記錄,和代碼由MySQL處理是:

2016-09-03T19:54:06.016215Z 125 Connect [email protected] on ElectronicsStoreDB using TCP/IP 
2016-09-03T19:54:06.017215Z 125 Query /* mysql-connector-java-6.0.3 (Revision: 9fb85a76ccb7506157e668f1516464a46e317d4a) */SELECT @@session.auto_increment_increment AS auto_increment_increment, @@character_set_client AS character_set_client, @@character_set_connection AS character_set_connection, @@character_set_results AS character_set_results, @@character_set_server AS character_set_server, @@init_connect AS init_connect, @@interactive_timeout AS interactive_timeout, @@license AS license, @@lower_case_table_names AS lower_case_table_names, @@max_allowed_packet AS max_allowed_packet, @@net_buffer_length AS net_buffer_length, @@net_write_timeout AS net_write_timeout, @@query_cache_size AS query_cache_size, @@query_cache_type AS query_cache_type, @@sql_mode AS sql_mode, @@system_time_zone AS system_time_zone, @@time_zone AS time_zone, @@tx_isolation AS tx_isolation, @@wait_timeout AS wait_timeout 
2016-09-03T19:54:06.018215Z 125 Query SET character_set_results = NULL 
2016-09-03T19:54:06.018215Z 125 Query SET autocommit=1 
2016-09-03T19:54:06.018215Z 125 Query SET autocommit=0 
2016-09-03T19:54:06.021216Z 125 Query select product0_.ProductID as ProductI1_4_0_, product0_.Category as Category2_4_0_, product0_.Description as Descript3_4_0_, product0_.Discontinued as Disconti4_4_0_, product0_.Manufacturer as Manufact5_4_0_, product0_.Name as Name6_4_0_, product0_.UnitPrice as UnitPric7_4_0_, product0_.UnitsInStock as UnitsInS8_4_0_ from Products product0_ where product0_.ProductID=19 
2016-09-03T19:54:06.045217Z 125 Query insert into Orders (CustomerID, OrderDate, ShippingDate, TotalPrice) values (14, '2016-09-02', '2016-09-02', 437.99) 
2016-09-03T19:54:06.048217Z 125 Query insert into OrderDetails (OrderID, ProductID, Quantity, UnitPrice) values (163, 19, 1, 437.99) 
2016-09-03T19:54:06.091220Z 125 Query update Products set Category='Printer', Description='USB 2.0, Wi-Fi', Discontinued=0, Manufacturer='EPSON', Name='XP-610', UnitPrice=437.99, UnitsInStock=134 where ProductID=19 
2016-09-03T19:54:06.092220Z 125 Query commit 
2016-09-03T19:54:06.094220Z 125 Query SET autocommit=1 
2016-09-03T19:54:06.095220Z 125 Query select @@session.tx_read_only 
2016-09-03T19:54:06.095220Z 125 Quit 

所以其在錯誤的日期

發現了類似的線程,但它並沒有真正幫助: dates consistently two days off 我使用jdbc.driverClassName=com.mysql.cj.jdbc.Driver

+2

什麼是您的時區?如果你在UTC的積極方面,'2016-09-02'的日期將是'UTC + 0'中的'2016-09-01'。 – Kayaman

+0

聽起來像卡亞曼是東西。是否值得打開/配置Hibernate的日誌輸出以查看正在生成的SQL? https://www.mkyong.com/hibernate/how-to-display-hibernate-sql-parameter-values-log4j/ –

+0

我不設置時區任何地方,我的時區是UTC + 01:00 但是,我的jdbc url到數據庫看起來像這樣: jdbc:mysql:// localhost:3306/ElectronicsStoreDB?useUnicode = true&useJDBCCompliantTimezoneShift = true&useLegacyDatetimeCode = false&serverTimezone = UTC –

回答

0

好吧,我設法解決這個問題 我從改變JDBC URL:

jdbc:mysql://localhost:3306/ElectronicsStoreDB?useUnicode=tr‌​ue&useJDBCCompliantT‌​imezoneShift=true&us‌​eLegacyDatetimeCode=‌​false&serverTimezone‌​=UTC 

jdbc:mysql://localhost:3306/ElectronicsStoreDB?useTimezone=trueuseUnicode=true&useLegacyDatetimeCode=false&serverTimezone=Europe/Warsaw 

令人驚訝的是,它現在應該如此運作