我是靠谱客的博主 年轻小霸王,最近开发中收集的这篇文章主要介绍JPA2.1与Java8 date/time通过AttributeConverter自定义映射支持利用provider自身的扩展,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
Java 8 开始引入了全新的时间API,但是因为JPA 2.1发布于Java 8之前,所以在JPA2.1中,Java 8 的新时间API是无法默认就被识别,正确地映射到数据库的。
解决办法主要有两类:
- 自己定义类型映射支持
- 使用provider提供的扩展
通过AttributeConverter自定义映射支持
以通过AttributeConverter实现java.sql.Date和java.time.LocalDate的转换为例
@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());
}
}
有上述Converter后,类型的转换对于实体的使用者来说就是透明的,LocalDate与Date的转换将会自动被应用于所有的attribute。
利用provider自身的扩展
JPA provider自身通常会有自己的扩展方式用于支持Java 8,以 Hibernate为例(5.0及以上),利用Hibernate自身的扩展只是加入一个额外的jar包的问题。
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-java8</artifactId>
<version>5.1.0.Final</version>
</dependency>
这种方式不用写任何额外的代码即可实现对Java 8的支持,但是同时也明确的和JPA provider之间的直接依赖关系。
最后
以上就是年轻小霸王为你收集整理的JPA2.1与Java8 date/time通过AttributeConverter自定义映射支持利用provider自身的扩展的全部内容,希望文章能够帮你解决JPA2.1与Java8 date/time通过AttributeConverter自定义映射支持利用provider自身的扩展所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复