我有以下代码(为简洁/简洁起见,已简化):
@Entity
@Table(name="mytable", schema="schemaName")
public class MobileDeviceData {
@Id
@Column(name="id")
private String id;
@Column(name="activitydetecteddate")
private ZonedDateTime activityDetectedDate;
}
和由Springboot实现的CrudRepository接口:
@Transactional
public interface MobileDeviceDataDao extends CrudRepository<MobileDeviceData, String> {
}
在表格中的timestamp列字段中包含activitydetecteddate的日期。
当我尝试通过调用将其保存到数据库时
mobileDeviceDataDao.save(mobileDeviceDataList);
我收到以下错误:
2015-11-06 11:57:53.095 WARN 3198 --- [nio-8080-exec-1] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 1292, SQLState: 22001
2015-11-06 11:57:53.095 ERROR 3198 --- [nio-8080-exec-1] o.h.engine.jdbc.spi.SqlExceptionHelper : Data truncation: Incorrect datetime value: '\xAC\xED\x00\x05sr\x00\x0Djava.time.Ser\x95]\x84\xBA\x1B"H\xB2\x0C\x00\x00xpw\x15\x06\x00\x00\x07\xDF\x0B\x06\x10 \x05;?<\x80\x0' for column 'activityDetectedDate' at row 1
2015-11-06 11:57:53.096 INFO 3198 --- [nio-8080-exec-1] o.h.e.j.b.internal.AbstractBatchImpl : HHH000010: On release of batch it still contained JDBC statements
2015-11-06 11:57:53.097 WARN 3198 --- [nio-8080-exec-1] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Warning Code: 1292, SQLState: 22007
2015-11-06 11:57:53.097 WARN 3198 --- [nio-8080-exec-1] o.h.engine.jdbc.spi.SqlExceptionHelper : Incorrect datetime value: '\xAC\xED\x00\x05sr\x00\x0Djava.time.Ser\x95]\x84\xBA\x1B"H\xB2\x0C\x00\x00xpw\x15\x06\x00\x00\x07\xDF\x0B\x06\x10 \x05;?<\x80\x0' for column 'activityDetectedDate' at row 1
2015-11-06 11:57:53.108 ERROR 3198 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; nested exception is org.hibernate.exception.DataException: could not execute statement] with root cause
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value: '\xAC\xED\x00\x05sr\x00\x0Djava.time.Ser\x95]\x84\xBA\x1B"H\xB2\x0C\x00\x00xpw\x15\x06\x00\x00\x07\xDF\x0B\x06\x10 \x05;?<\x80\x0' for column 'activityDetectedDate' at row 1
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3868)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3806)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2470)
有人可以告诉我我做错了什么,如何将代码正确地从ZonedDateTime转换为Timestamp。
我能够找到不需要代码中特定于Hibernate注释的此问题的解决方案。我可以通过将这三个jar添加到类路径中来实现这一点(我正在使用Gradle):
compile 'org.hibernate:hibernate-core:5.0.3.Final'
compile 'org.hibernate:hibernate-entitymanager:5.0.3.Final'
compile 'org.hibernate:hibernate-java8:5.0.3.Final'
然后,Hibernate能够正确处理新的Java8类型。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句