我最近几个月一直在使用Spring和MYSQL,这是一次非常成功和顺利的体验。在这里,我使用java 8 LocalDateTime存储日期时间字段,JPA自动将这些字段映射到mysql tinyblob列。
最近,我需要通过脚本向系统添加一些数据。为了填充日期时间列,我创建了MYSQL时间戳变量并插入到tinyblob列中。但是,系统开始抱怨SerializationException,其根本原因是转换后的datetime列。然后,我查看了通过应用程序插入的日期时间列,如下所示
select CAST(drop_off_time AS CHAR(10000) CHARACTER SET utf8) From job

看起来,当您通过应用程序插入时,它是作为某种java序列化插入的。但是,通过mysql脚本,我们无法复制该功能。
现在我有两个选择。1)我需要找到一种方法来编写mysql脚本来生成类似于应用程序的日期时间列。2)我需要将Spring映射从tinyblob更改为mysql脚本可以支持的另一种数据类型
感谢你的帮助
谢谢,凯斯
编辑
在下面的回答和评论之后,我找到了一个简单的解决方案。
如果您使用Hibernate 5.0+,您可以顺便进来。
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-java8</artifactId>
<version>${hibernate.version}</version>
</dependency>然后,系统开始将java 8 LocalDateTime参数映射到mysql DATETIME列。
发布于 2017-09-04 12:11:37
根据JPA2.1JPA2.1JPA2.1JPA 2可能在短时间内不支持LocalDateTime,2将是正式的)。Hibernate 5支持“早期发布”
可移植和支持,因为JPA2.0是javax.persistence.AttributeConverter,在所有JPA提供程序上都能很好地工作(并且在Hibernate 5上没有什么不好的地方)
@Converter(autoApply = true)
public class LocalDateAttributeConverter implements AttributeConverter<LocalDate, Date> {
@Override
public Date convertToDatabaseColumn(LocalDate locDate) {
return (locDate == null ? null : Date.valueOf(locDate));
}
@Override
public LocalDate convertToEntityAttribute(Date sqlDate) {
return (sqlDate == null ? null : sqlDate.toLocalDate());
}
}https://stackoverflow.com/questions/46036493
复制相似问题