はじめに
Hibernate 5系と6系と、JPAの名前空間の変更(javax.persistence
-> jakarta.persistence
)対応がややこしいので、と言うか経緯知らないと正しくバージョン選択できないので、ここにまとめておきます。
Hibernate ver | Java ver | Jakarta Persistence(JPA) | 名前空間 |
---|---|---|---|
Hibernate 5.3+ | Java 8+ | 2.2 | javax.persistence |
Hibernate 5.5+ | Java 8+ | 2.2 / 3.0 | javax.persistence / jakarta.persistence |
Hibernate 5.6+ | Java 8+ | 2.2 / 3.0 | javax.persistence / jakarta.persistence |
Hibernate 6.1+ | Java 11+ | 3.0 / 3.1 | jakarta.persistence |
Hibernate 6.2+ | Java 11+ | 3.1 | jakarta.persistence |
Hibernate 5.5 ~ 5.6 は、名前空間が javax.persistence
のものと jakarta.persistence
のもの2系統が提供されています。
Java Persistence API 2.2 (Jakarta Persistence 2.2)
Java EE8 に含まれる JPA仕様は JPA 2.2 です。 この時期に Jakarta EE8 に改名され、JPA は Jakarta Persistence 2.2 となりました。
JPA 2.2 と Jakarta Persistence 2.2 は名前こそ違うものの、同等品です。APIの名前空間も javax.persistence
から変更ありません。
Jakarta Persistence 2.2 を使う場合は以下の依存定義となります。
dependencies { compileOnly("jakarta.persistence:jakarta.persistence-api:2.2.3") implementation("org.hibernate:hibernate-core:5.6.15.Final") }
Java EE8 時代の javax.persistence:javax.persistence-api:2.2
も存在しますが、改名後の jakarta
のものを使うべきでしょう。
Hibernate 5系では、Java8 以降がサポートされています。 もし Java11 などを使う場合には以下の依存を追加する必要があります。
dependencies { // ... implementation("org.glassfish.jaxb:jaxb-runtime:2.3.8") }
Java 9 で導入されたモジュールにより、非推奨であった JAXB が削除され、JAXB(XML Binding) は EE9 仕様に移管されました。
Hibernate は XML Binding の実装を利用すため、これを依存に追加する必要があります(Java 8 利用時には不要です)。
Jakarta Persistence 3.x
Jakarta EE9 では、javax.persistence
-> jakarta.persistence
への名前空間の変更が行われました。
これに伴い、Jakarta Persistence は Jakarta Persistence 3.0 になりました。 Jakarta Persistence 3.0 は Java EE9、 Jakarta Persistence 3.1 は Java EE10 に相当します。
Hibernate 5.x 系(正確には 5.5.x と 5.6.x)では、javax.persistence
と jakarta.persistence
の2系統が提供されています。
Jakarta Persistence 3.X を、Hibernate 5.x 系で使う場合は以下の依存定義となります。
dependencies { compileOnly("jakarta.persistence:jakarta.persistence-api:3.1.0") implementation("org.hibernate:hibernate-core-jakarta:5.6.15.Final") implementation("org.glassfish.jaxb:jaxb-runtime:4.0.2") }
名前空間 jakarta.persistence
に対応した hibernate-core-jakarta
を利用します。
Jakarta XML Binding 3.X は Jakarta EE9(つまり名前空間は jakarta.xml.bind
)、Jakarta XML Binding 4.X は Jakarta EE10 の仕様に含まれます。
Jakarta XML Binding の実装である jaxb-runtime
のメジャーバージョンもこれに該当します。
Jakarta EE の同一バージョンの組み合わせは以下のようになります。
jakarta.persistence-api:3.0.x
->org.glassfish.jaxb:jaxb-runtime:3.x.x
jakarta.persistence-api:3.1.x
->org.glassfish.jaxb:jaxb-runtime:4.x.x
Hibernate 6.x
Hibernate 6.x からは名前空間 jakarta.persistence
への完全移行が行われました。
hibernate-core-jakarta
のような2系統リリースは無くなり、1本に統一されています。
以下のような依存定義になります。
dependencies { compileOnly("jakarta.persistence:jakarta.persistence-api:3.1.0") implementation("org.hibernate.orm:hibernate-core:6.1.7.Final") implementation("org.glassfish.jaxb:jaxb-runtime:4.0.2") }
グループIDは、org.hibernate
-> org.hibernate.orm
へ変更されているので注意が必要です。
まとめ
依存は以下のパターンでの定義になるでしょう。
- Jakarta Persistence 2.2(名前空間
javax.persistence
) - Java8 - Jakarta EE8
dependencies { compileOnly("jakarta.persistence:jakarta.persistence-api:2.2.3") implementation("org.hibernate:hibernate-core:5.6.15.Final") }
- Jakarta Persistence 2.2(名前空間
javax.persistence
) - Java11 - Jakarta EE8
dependencies { compileOnly("jakarta.persistence:jakarta.persistence-api:2.2.3") implementation("org.hibernate:hibernate-core:5.6.15.Final") implementation("org.glassfish.jaxb:jaxb-runtime:2.3.8") }
- Jakarta Persistence 3.0(名前空間
jakarta.persistence
) - Java11 - Jakarta EE9 - Hibernate 5
dependencies { compileOnly("jakarta.persistence:jakarta.persistence-api:3.0.0") implementation("org.hibernate:hibernate-core-jakarta:5.6.15.Final") implementation("org.glassfish.jaxb:jaxb-runtime:3.0.2") }
- Jakarta Persistence 3.1(名前空間
jakarta.persistence
) - Java11 - Jakarta EE10 - Hibernate 6
dependencies { compileOnly("jakarta.persistence:jakarta.persistence-api:3.1.0") implementation("org.hibernate.orm:hibernate-core:6.1.7.Final") implementation("org.glassfish.jaxb:jaxb-runtime:4.0.2") }