java localdate mysql_mysql – 带有Java 8 LocalDateTime的Spring Data JPA

我最近几个月一直在使用Spring Data JPA和MYSQL,这是一次非常成功和顺畅的体验.在那里我使用java 8 LocalDateTime来存储日期时间字段,JPA自动将这些字段映射到mysql tinyblob列.

最近我要求通过脚本向系统添加一些数据.为了填充日期时间列,我创建了MYSQL TIMESTAMP变量并插入到tinyblob列中.但是系统开始抱怨SerializationException,其根本原因是这个转换后的datetime列.

然后我看一下通过应用程序插入的日期时间列,如下所示

select CAST(drop_off_time AS CHAR(10000) CHARACTER SET utf8) From job

67d93b9714fbc36c4a82b677cf4b09ff.png

看起来当你通过应用程序插入时,它作为某种java序列化插入.但是,通过mysql脚本,我们无法复制该功能.

现在我有两个选择.

1)我需要找到一种方法来编写一个mysql脚本来生成类似于应用程序的Date time列.

2)我需要将Spring数据JPA映射从tinyblob更改为mysql脚本可以支持的另一种数据类型

感谢您的帮助

谢谢,

Keth

编辑

在按照下面提供的答案和评论后,我能够找到一个简单的解决方案

如果你使用Hibernate 5.0,你可以进入

org.hibernate

hibernate-java8

${hibernate.version}

然后系统开始将java 8 LocalDateTime属性映射到mysql DATETIME列

解决方法:

根据JPA 2.1,LocalDateTime不是支持的(可能在短时间内JPA 2.,2将是官方的). Hibernate 5支持’早期发布’

由于JPA 2.0是javax.persistence.AttributeConverter,所以在所有JPA提供程序上运行得非常好(并且在Hibernate 5上没什么坏处)

@Converter(autoApply = true)

public class LocalDateAttributeConverter implements AttributeConverter {

@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());

}

}

标签:java-8,mysql,spring-data-jpa,spring-data,jpa

来源: https://codeday.me/bug/20190828/1750573.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值