java.time YearMonth 作为实体内的类型

标签 java jpa java-8 eclipselink java-time

如何在实体中使用 YearMonth?我看过很多关于转换器的堆栈溢出答案?这还需要吗?如果需要怎么办?

@Basic(optional = false)
@NotNull
@Column(name = "cc_exp_date")
private YearMonth ccExpDate;

我遇到的异常如下。我可以在 set 方法中将其转换为日期,然后在实体的 get 方法中转换回 YearMonth 作为解决方法吗?

 MysqlDataTruncation: Data truncation: Incorrect date value: '\xAC\xED\x00\x05sr\x00\x0Djava.time.Ser\x95]\x84\xBA\x1B"H\xB2\x0C\x00\x00xpw\x06\x0C\x00\x00\x07\xE2\x02x' for column 'cc_exp_date' at row 1

最佳答案

如果您的 JPA 提供程序没有以合理的方式持久保存类型(在本例中,因为它是一个 Java8 类,是在 JPA 2.1 获得批准后添加的,并且因为您使用的是没有太多更新的 EclipseLink最近支持较新的类型),那么您需要定义一个 JPA 2.1 AttributeConverter 将其转换为标准 JPA 持久类型(在本例中类似于 java.sql.Date )。

其他 JPA 提供程序支持开箱即用地持久保存此类类型(DataNucleus JPA 当然可以,Hibernate 也可能具有可选的依赖项?)

关于java.time YearMonth 作为实体内的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40825495/

相关文章:

java - JPA persit 以多对一关系创建新的现有实体

java将单个数字流式传输到一个范围

spring - JPA QBE 与 @JoinTable

java - 多对一选择语句?

Java 8 流首先调用 forEach(...)

Java8集合Replaceall方法错误

java - 如果程序退出代码非零,如何查看 IntelliJ 控制台?

java - org.hibernate.PersistentObjectException : detached entity passed to persist domain object

java - 为什么Gradle的java编译类路径不包含指定的依赖项

java - Firebase/GeoQuery - 最大半径 IF 语句