
作者 ,译者
Oracle最近发布 了 Java Persistence API(JPA)2.2 版。JPA 规范用于将 Java 对象持久化映射到关系数据库中。
作为 Java EE 8 平台 的组成部分,JPA 2.2 中添加了对一些新特性的支持,包括查询结果的流处理、将 ManagedBeans 注入 AttributeConverters、重复注解(Repeating Annotations),以及操作 Java 8 日期/时间 API 中的类等。虽然更改为数不多,但是特点显著,因为 JPA 2.2 是首个以 Java 8 为基线的版本。
在《Java Magazine》11 月/12 月合刊(第 17 期)上,发表了 Josh Juneau 的文章“What’s New in JPA 2.2”。文中指出:
最终,JPA 与 Java SE 8 保存了一致。它支持开发人员使用日期/时间 API、查询结果流和重复注解等特性。
查询结果流
JPA 在 Query 和 TypedQuery 接口中,添加了 getResultStream() 方法。使用这一改进,查询可返回一个结果流,这提供了一种操作数据的便利方法。在 JPA 2.2 之前,查询只能返回一个列表。使用新的流方法的示例代码如下:
流处理提高了数据库查询的性能。但是在一些情况下,我们会需要操作一些大规模的数据集,这时 ResultSet分页的执行效果可能会更好。一些持久化方法同样考虑到了性能上的需求,并提供了更好的 getResultStream()实现。面对大规模数据流时,开发人员应考虑性能问题。
可注入的 AttributeConverter
JPA 2.2 中添加了将 ManagedBeans 注入到 AttributeConverter 的特性。该特性是使用标注上下文和依赖注入(CDI,Contexts and Dependency Injection)给出的 @Inject 注解实现的。使用该特性,可在必要时将 CDI 资源注入到任一 AttributeConverter。示例代码如下:
可重复注解
在 Java 8 中,如果一个注解使用 @Repeatable 定义了容器注解(Container Annotation),那么该注解就是可重复的。可重复注解允许类、方法或属性上的同一注解对应于多个实例。JPA 2.2 指定了下列注释是可重复的:
AssociationOverrideAttributeOverrideConvertJoinColumnMapKeyJoinColumnNamedEntityGraphNamedNativeQueryNamedQueryNamedStoredProcedureQueryPersistenceContextPersistenceUnitPrimaryKeyJoinColumnSecondaryTableSqlResultSetMapping
这一改进使开发人员不再需要指定容器注释,提高了代码的可读性,进而支持编写如下的构造:
支持 Java 8 的日期/时间
JPA 2.2 提供了基本的 Java 8 日期/时间类型支持,包括对下列 java.time 中类的映射:
LocalDateLocalTimeLocalDateTimeOffsetTimeOffsetDateTime
与 JPA 以前版本的不同之处在于,2.2 版中不再需要编写 AttributeConverter 去执行数据库和 Java 8 间日期/时间类型的相互映射。由于 JPA 内置了对 Java 日期/时间 API 的支持,因此在使用上述五种受支持的类型时,不需要再做任何额外的工作,只需插入到想要的现有 API 中即可。示例代码如下:
由于这些改进是 Java EE 8 平台组成部分,因此当前只有兼容 Java EE 8 的应用服务器才能提供这些服务。但是对于较早的 Java EE 版本,可以简单地通过在项目中包含相应的 JAR 文件,使用这些新特性。
更多细节,参见 Java Persistence 2.2 维护版 的发行说明。
查看英文原文: Handy Improvements in JPA 2.2
转自 http://ift.tt/2mQvnPV
The post JPA 2.2 改进了易用性 appeared first on Linuxeden开源社区.
http://ift.tt/2BdIqzl
没有评论:
发表评论