在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