在 MySQL 中保留 java LocalDate
persist java LocalDate in MySQL
我正在编写一个 java 客户端应用程序,使用的是:SE 8、MySQL 5.6 (Connector/J 5.1)、JPA 2.1。当我尝试保留具有 ID(int 自动递增)、日期(LocalDate)的实体时。它抛出一个异常说:
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<LocalDate, Date> {
@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 的更多信息info and some more about using the converters
AttributeConverter也是通用的:
@Converter(autoApply = true)
public class LocalDatePersistenceConverter implements
AttributeConverter<LocalDate, Date> {
@Override
public Date convertToDatabaseColumn(LocalDate entityValue) {
return java.sql.Date.valueOf(entityValue);
}
@Override
public LocalDate convertToEntityAttribute(Date databaseValue) {
return databaseValue.toLocalDate();
}
}
如果使用 hibernate,我刚刚发现 here 也可以利用 Java 8 支持,该支持在一个名为 hibernate-java8.jar 的单独 jar 文件中提供。所以基本上你可以在你的 pom 中添加这样的东西并准备好:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-java8</artifactId>
</dependency>
我正在编写一个 java 客户端应用程序,使用的是:SE 8、MySQL 5.6 (Connector/J 5.1)、JPA 2.1。当我尝试保留具有 ID(int 自动递增)、日期(LocalDate)的实体时。它抛出一个异常说:
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<LocalDate, Date> {
@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 的更多信息info and some more about using the converters
AttributeConverter也是通用的:
@Converter(autoApply = true)
public class LocalDatePersistenceConverter implements
AttributeConverter<LocalDate, Date> {
@Override
public Date convertToDatabaseColumn(LocalDate entityValue) {
return java.sql.Date.valueOf(entityValue);
}
@Override
public LocalDate convertToEntityAttribute(Date databaseValue) {
return databaseValue.toLocalDate();
}
}
如果使用 hibernate,我刚刚发现 here 也可以利用 Java 8 支持,该支持在一个名为 hibernate-java8.jar 的单独 jar 文件中提供。所以基本上你可以在你的 pom 中添加这样的东西并准备好:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-java8</artifactId>
</dependency>