在MySQL中持久化java LocalDate

我正在编写一个java客户端应用程序,使用:SE 8,MySQL 5.6(Connector / J 5.1),JPA 2.1。 当我尝试持有具有ID(int自动增量),date(LocalDate)的实体时。 抛出exception说:

Internal Exception: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect date value: '\xAC\xED\x00\x05sr\x00\x0Djava.time.Ser\x95]\x84\xBA\x1B"H\xB2\x0C\x00\x00xpw\x07\x03\x00\x00\x07\xDF\x03\x06x' for column 'date' at row 1 

MySQL(我的意思是连接器)不支持新的日期和时间API或什么。 如果是这样我该怎么办?

 @Entity @Table(schema="app") public class Run implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private int id; //number of connections private LocalDate date; 

注册自定义转换器可以帮助您解决问题

 @Converter(autoApply = true) public class LocalDatePersistenceConverter implements AttributeConverter { @Override public java.sql.Date convertToDatabaseColumn(LocalDate entityValue) { return java.sql.Date.valueOf(entityValue); } @Override public LocalDate convertToEntityAttribute(java.sql.Date databaseValue) { return databaseValue.toLocalDate(); } } 

有关转换LocalDate 信息的更多信息以及有关使用转换器的更多信息

AttributeConverter也是通用的:

 @Converter(autoApply = true) public class LocalDatePersistenceConverter implements AttributeConverter { @Override public Date convertToDatabaseColumn(LocalDate entityValue) { return java.sql.Date.valueOf(entityValue); } @Override public LocalDate convertToEntityAttribute(Date databaseValue) { return databaseValue.toLocalDate(); } } 

更短:

 @Converter(autoApply = true) public class LocalDatePersistenceConverter implements AttributeConverter { @Override public Date convertToDatabaseColumn(LocalDate attribute) { return valueOf(attribute); } @Override public LocalDate convertToEntityAttribute(Date dbData) { return dbData.toLocalDate(); } } 

如果使用hibernate,我刚刚在这里找到了一个可以利用在一个名为hibernate-java8.jar的独立jar文件中提供的Java 8支持。 所以基本上你可以在你的pom中添加这样的东西并准备好去:

  org.hibernate hibernate-java8