2017-09-04 219 views
1

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

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

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

enter image description here

它看起来像当你插入通过应用程序,它插入一些类型的Java序列化。然而,通过一个mysql脚本,我们不能复制该功能。

现在我有两个选择。 1)我需要找到一种方法来编写一个mysql脚本来生成类似于应用程序的日期时间列。 2)我需要从TINYBLOB更改Spring数据JPA映射到哪个MySQL的脚本可以支持

另一种数据类型感谢您的帮助

感谢, Keth

编辑

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

如果您使用Hibe rnate 5.0+,您可以在

<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-java8</artifactId> 
    <version>${hibernate.version}</version> 
</dependency> 

下降然后系统开始在MySQL的DATETIME列

+1

根据其休眠版本的Java 8日期时间API不受支持,并且将以二进制形式存储,而不是时间戳。 –

+5

LocalDateTime不应存储在斑点中。这使得无法在日期上进行查询,无法在Java以外的任何地方使用该值,并且占用的磁盘空间比所需的多得多。最近的Hibernate版本支持LocalDateTime,它存储为日期/时间戳(参见http://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/Hibernate_User_Guide.html#basic-provided)。你使用的是哪个版本的spring/hibernate? –

+3

检查这个depyendency,它会为hibernate添加java8 datetime api支持:http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22org.hibernate%22%20AND%20a%3A%22hibernate- java8%22 据我所知它可用于Hibernate 5只有 –

回答

3

映射了Java 8 LocalDateTime性质鉴别仪表,根据JPA 2.1 LocalDateTime不oficially(可能在很短的时间JPA suppoorted 2.,2将是官方的)。休眠5的支持,“提前释放”

便携式和支持,因为JPA 2.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()); 
} 
} 
相关问题