- はじめに
- 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);