
- はじめに
- datetime function の追加
- java.util.UUID データタイプのネイティブサポート追加
- GenerationType.UUID の追加
- EntityManager(Factory) の AutoCloseable 実装
- いくつかの数値関数の追加
- local date/time 用の関数の追加
- PersistenceException 系で原因例外がネスト可能となった
- java.instrument への推移的依存の解消
- Criteria CASE 式の拡張
はじめに
Jakarta EE 10 で、Jakarta Persistence は 3.0 から 3.1 となります。
仕様策定中で公式にFIXされてはいませんが、現時点(2022年2月時点)での変更点のまとめです。
マイナーバージョンアップということで変更点はそれほどありません。
datetime function の追加
JPQL に EXTRACT() が追加され、日時から特定の部分を抽出可能になりました。
使い方は以下のようになります。
FROM Course c WHERE c.year = EXTRACT(YEAR FROM CURRENT_DATE)
上記では YEAR として年を抽出しています。
キーワードは YEAR, QUARTER, MONTH, WEEK, DAY, HOUR, MINUTE, SECOND が利用できます。
java.util.UUID データタイプのネイティブサポート追加
java.util.UUID がデータタイプのサポートに追加されました。
エンティティフィールド型または JPA クエリパラメータとして java.util.UUID を利用可能になります。
GenerationType.UUID の追加
ID の生成ストラテジとして GenerationType.UUID が追加されます。
@Id @GeneratedValue(strategy = GenerationType.UUID) UUID id;
デフォルトでは、プラットフォーム(DB)から UUID 値を取得しようとし、プラットフォームがサポートしていない場合は、org.eclipse.persistence.sequencing.UUIDSequence を参照して、UUID.randomUUUID() を呼び出します。
EntityManager(Factory) の AutoCloseable 実装
EntityManager と EntityManagerFactory に AutoCloseable が implement され、try-with-resources で扱えるようになりました。
いくつかの数値関数の追加
CriteriaBuilder にいくつかの数値関数が追加されました。
sign()ceiling()floor()exp()ln()power()round()
JPQL でも同関数が利用可能です。
local date/time 用の関数の追加
CriteriaBuilder に LocalDate, LocalDateTime, LocalTime 用の以下が追加されました。
/** * Create expression to return current local date. * @return expression for current date */ Expression<java.time.LocalDate> localDate(); /** * Create expression to return current local datetime. * @return expression for current timestamp */ Expression<java.time.LocalDateTime> localDateTime(); /** * Create expression to return current local time. * @return expression for current time */ Expression<java.time.LocalTime> localTime();
旧来の currentDate() などでは、現在では推奨されない java.sql.Date を返すものでしたが、この変更により、 java.time.* を扱えるようになりました。
JPQL では LOCAL DATE LOCAL TIME LOCAL DATETIME キーワードとして使うことができます。
PersistenceException 系で原因例外がネスト可能となった
PersistenceException のサブクラス(EntityNotFoundException, NonUniqueResultException, TransactionRequiredException) に Exception cause を引数に取るコンストラクタが追加されました。今までは、原因例外を設定することができませんでした。
java.instrument への推移的依存の解消
JPA API の module-info から java.instrument が削除されました。
マイクロサービス対応なども視野に、本質的ではない依存をスリムにしていきたいという意図です。これにより内部実装に多少変更が入っています。
Criteria CASE 式の拡張
Criteria CASE 式で条件に Expressions を指定できるようになりました。
/** * Add a when/then clause to the case expression. * @param condition "when" condition * @param result "then" result value * @return simple case expression */ SimpleCase<C, R> when(Expression<? extends C> condition, R result); /** * Add a when/then clause to the case expression. * @param condition "when" condition * @param result "then" result expression * @return simple case expression */ SimpleCase<C, R> when(Expression<? extends C> condition, Expression<? extends R> result);