JPA 3.1(Jakarta EE 10)の変更点まとめ

Jakarta EE 10でJPAのバージョンが3.1になりました。 Java EE 8ではJPAのバージョンは2.2で、そのあとの3.0はパッケージ名の変換のみだったので、 久しぶりの意味のある仕様変更になります。(定型文)

ということでまとめ。 ソースを読んで差分をざっくり眺めてるだけなので、間違い、抜け漏れは当然あります。あれ?と思った場所があったら教えてください。 JPAリポジトリに仕様書が含まれてたので、そちらで確認しました。

ちなみに、3.0から正式名称がJakarta Persistence APIに変更されてます。(旧Java Persistence API)

全般

Servletの変更点の数ですらメジャーバージョンが上がってるのに比べて、マイナーバージョンしか上がってない程度に変更点がほぼありません。

ざっくり列挙すると以下の通りです。

CriteriaBuilderにいくつかのメソッドが追加されました。sign、floor、exp、ln、power、roundの数値演算用のメソッドです。JPQLにも同様の関数が追加されています。

DateTime APIをJPQL、Criteriaで扱えるようになりました。CriteriaBuilderにLocalDate、LocalDateTime、LocalTimeの現在日付を返すメソッドが追加されています。

CriteriaBuilderのいくつかのメソッドに注意事項が追加されました。modは整数除算のあまりであることが明記される等、いったい何があったんだと言いたくなるような・・・・・ JPQLと指定するパラメーターの順番が逆になってますとかは、にゃーん。

EntityManager、EntityManagerFactoryがAutoCloseableをimplimentsするようになりました。外部リソースにアクセスするものなので、むしろなんで今までimplimentsしてなかったんだ?というぐらいなのですが、静的解析で引っかかる可能性があるので注意が必要かもしれません。

GenerationType(PK生成を自動で行う場合に設定できる値)にUUIDが追加されました。UUIDを使用した場合にはB+treeインデックスのメンテナンスに時間がかかることが知られているので、あまり使うことはないと思います。*1

SPI用としてTransformerExceptionが追加されました。ユーザーには影響がありません。

ということで、ほぼ変更なしです。