プロジェクト名が Hibernate Types から Hypersistence Utils に変更されました。これは、プロジェクトの範囲がはるかに広くなり、Spring ユーティリティも提供されるようになったためです。
このため、Hibernate Types 2.x から Hypersistence Utils 3.x に移行する場合は、次の手順に従う必要があります。
com.vladmihalcea.hibernate
からio.hypersistence.utils.hibernate
に変更する必要があります。com.vladmihalcea.spring
からio.hypersistence.utils.spring
に変更する必要があります。それでおしまい!
Hypersistence Utils プロジェクトは、Spring と Hibernate の両方に汎用ユーティリティを提供します。
このプロジェクトの主な利点は、 Hibernate ORM 6.6 、 6.5 、 6.4 、 6.3から6.2 、 6.1 、 6.0 、 5.6 、および Hibernate 5.5に至る幅広い Hibernate バージョンをサポートしていることです。
使用している Hibernate バージョンに応じて、次の依存関係を追加する必要があります。
<dependency>
<groupId>io.hypersistence</groupId>
<artifactId>hypersistence-utils-hibernate-63</artifactId>
<version>3.9.0</version>
</dependency>
<dependency>
<groupId>io.hypersistence</groupId>
<artifactId>hypersistence-utils-hibernate-62</artifactId>
<version>3.9.0</version>
</dependency>
<dependency>
<groupId>io.hypersistence</groupId>
<artifactId>hypersistence-utils-hibernate-60</artifactId>
<version>3.9.0</version>
</dependency>
<dependency>
<groupId>io.hypersistence</groupId>
<artifactId>hypersistence-utils-hibernate-55</artifactId>
<version>3.9.0</version>
</dependency>
Hypersistence Utils プロジェクトは、使用するためにプロジェクト内で明示的に宣言する必要があるオプションの依存関係のリストを定義します。
Guava、Jackson、PostgreSQL JDBC Driver など、これらすべての依存関係がオプションである理由は、すべてのプロジェクトでそれらが必要なわけではないためです。
さらに、時折セキュリティ上の問題が発見され、新しいバージョンで修正される可能性があるため、依存関係のバージョンは非常に重要です。
したがって、このライブラリに依存して依存関係のバージョンを提供することは非常に危険です。
たとえば、このプロジェクトが大きく依存している Jackson Data Bind ライブラリでは 65 件のセキュリティ問題が発見されています。
セキュリティ問題のリスクを回避するには、Hypersistence Utils ライブラリとともに使用しているすべての依存関係を常にアップグレードする責任を負う必要があります。
JSON タイプを使用している場合は、Hibernate バージョンに基づいて次の依存関係を設定するとよいでしょう。
< dependency >
< groupId >com.fasterxml.jackson.module</ groupId >
< artifactId >jackson-module-jakarta-xmlbind-annotations</ artifactId >
< version >${jackson-module-jakarta-xmlbind-annotation}</ version >
</ dependency >
< dependency >
< groupId >com.fasterxml.jackson.core</ groupId >
< artifactId >jackson-databind</ artifactId >
< version >${jackson-databind.version}</ version >
</ dependency >
< dependency >
< groupId >com.fasterxml.jackson.module</ groupId >
< artifactId >jackson-module-jaxb-annotations</ artifactId >
< version >${jackson-module-jaxb-annotation}</ version >
</ dependency >
Guava を使用してRange
をマッピングしている場合は、Guava の依存関係を明示的に指定する必要があります。
< dependency >
< groupId >com.google.guava</ groupId >
< artifactId >guava</ artifactId >
< version >${guava.version}</ version >
</ dependency >
MonetaryAmount
をマッピングしている場合は、Moneta の依存関係を明示的に指定する必要があります。
< dependency >
< groupId >org.javamoney</ groupId >
< artifactId >moneta</ artifactId >
< version >${moneta.version}</ version >
< type >pom</ type >
</ dependency >
PostgreSQL 固有の列タイプ ( inet
、 hstore
、 array
、 interval
) をマッピングしている場合は、PostgreSQL の依存関係を明示的に指定する必要があります。
< dependency >
< groupId >org.postgresql</ groupId >
< artifactId >postgresql</ artifactId >
< version >${postgresql.version}</ version >
</ dependency >
JsonType
使用すると、Oracle、SQL Server、PostgreSQL、または MySQL のいずれを使用しているかに関係なく、JSON 列タイプをマップできます。
Hibernate 6 を使用している場合は、任意の JSON 列をMap
、 List
、 POJO、 String
、またはJsonNode
エンティティ プロパティにマップできます。
@ Type ( JsonType . class )
private Map < String , String > properties = new HashMap <>();
Hibernate 5 を使用している場合は、Hibernate Type の完全修飾名を指定できます。
@Type(type = "io.hypersistence.utils.hibernate.type.json.JsonType")
または、JPA エンティティが配置されている同じパッケージ内のpackage-info.java
クラスに次のマッピングを追加できます。
@ TypeDef (
name = "json" , typeClass = JsonType . class
)
package io . hypersistence . optimizer ;
import io . hypersistence . utils . hibernate . type . json . JsonType ;
import org . hibernate . annotations . TypeDef ;
後で、次のようにMap
、 List
、 POJO、 String
、またはJsonNode
エンティティ プロパティを JSON 列にマップできます。
@ Type ( type = "json" )
private Map < String , String > properties = new HashMap <>();
詳細については、この記事をご覧ください。
JSON 列の型を
POJO
、List<POJO>
、またはMap<String, POJO>
にマッピングする場合、POJO
型がデフォルトのequals
およびhashCode
メソッドをオーバーライドし、JSON オブジェクトのコンテンツに従ってそれらを実装することを確認する必要があります。そうしないと、Hibernate ダーティ チェック メカニズムが予期しない UPDATE ステートメントをトリガーする可能性があります。詳細については、#134 号をご覧ください。
Oracle を使用する場合、いくつかのオプションがあります。
@Column
アノテーションのcolumnDefinition
属性を使用して列の型をヒントする限り、 JSON
、 VARCHAR
、またはBLOB
列型を操作できる汎用のJsonType
を使用できます。JsonStringType
使用して、JSON を格納するVARCHAR2
列タイプをマップできます。JsonBlobType
使用して、JSON を格納するBLOB
列タイプをマップできます。詳細については、この記事をご覧ください。
SQL Server を使用する場合、汎用のJsonType
またはJsonStringType
を使用して、JSON を格納するNVARCHAR
列型をマップできます。
詳細については、この記事をご覧ください。
PostgreSQL を使用する場合、汎用のJsonType
またはJsonBinaryType
を使用して、 jsonb
とjson
両方の列タイプをマップできます。
詳細については、この記事をご覧ください。
MySQL を使用する場合、汎用のJsonType
またはJsonStringType
を使用してjson
列の型をマップできます。
詳細については、この記事をご覧ください。
JsonNode
JSON 列にマップする方法No Dialect mapping for JDBC type: 1111
問題を修正する方法column is of type jsonb but expression is of type record
またはbytea
の問題を修正する方法List
にマップする方法Duration
にマップする方法MonetaryAmount
マッピングする最良の方法java.time.YearMonth
を DATE または INTEGER 列にマップする方法java.time.Year
とjava.time.Month
をマップする方法Character
NULL 可能 CHAR 列に変換UserType
実装を簡素化するImmutableType
ユーティリティfindAll
アンチパターン@Retry
アノテーションBaseJpaRepository
、JPA 用語では意味をなさないfindAll
メソッドやsave
メソッドを提供しないため、デフォルトの Spring Data JpaRepository
よりもはるかに優れた代替品です。
BaseJpaRepository
ユーティリティを使用するには、 @EnableJpaRepositories
構成でrepositoryBaseClass
属性を指定して、Hypersistence Utils プロジェクトからBaseJpaRepositoryImpl
参照するようにしてください。
@ Configuration
@ EnableJpaRepositories (
value = "your.repository.package" ,
repositoryBaseClass = BaseJpaRepositoryImpl . class
)
public class JpaConfiguration {
...
}
your.repository.package
は Spring リポジトリの Java パッケージです。
BaseJpaRepository
が優先されますが、デフォルトのJpaRepository
使用する必要がある場合は、少なくともHibernateRepository
拡張して、問題を引き起こす可能性のあるメソッドを非推奨にすることができます。
HibernateRepository
を使用するには、 @EnableJpaRepositories
構成にio.hypersistence.utils.spring.repository
パッケージが含まれていることを確認してください。
@ Configuration
@ EnableJpaRepositories (
value = {
"io.hypersistence.utils.spring.repository" ,
"your.repository.package" ,
...
}
)
public class JpaConfiguration {
...
}
your.repository.package
は Spring リポジトリの Java パッケージです。
BatchSequenceGenerator
- Hibernate バッチ シーケンス ジェネレーターCamelCaseToSnakeCaseNamingStrategy
- Hibernate を使用して CamelCase プロパティを Snake_case 列名にマップする方法ClassImportIntegrator
- JPA を使用してコンパクトな DTO プロジェクション クエリを作成する方法ListResultTransformer
- Hibernate ResultTransformer を使用する最良の方法MapResultTransformer
- JPA または Hibernate クエリから Map 結果を返す方法SQLStatementCountValidator
- テスト中に Hibernate N+1 クエリの問題を検出する方法SQLExtract
- JPQL または JPA 基準から SQL クエリを取得する方法QueryStackTraceLogger
- Hibernate によって生成された SQL クエリのソースを見つける方法このプロジェクトは、Libre と同様に無料であり、無償ではありません。
無料サポートはございません。無料で入手できるのはソース コードとバイナリのみです。
特定の問題についてサポートが必要な場合は、Coaching Basic プログラムまたは Coaching Pro プログラムを購入する必要があります。
有料サポート オプションのほかに、独自の修正を提供するオプションもあります。そのためには、次のことを行う必要があります。
ただし、時間がないため、送信されたプル リクエストを随時レビューするため、プル リクエストがレビューされて統合されるまでに数か月かかる場合があります。
JPA と Hibernate が適切に使用されているかどうかを自動的に検出できるツールがあると想像してください。パフォーマンスの問題もなくなり、アプリケーションがほとんどクロールしない理由を理解するために数え切れないほどの時間を費やす必要もなくなりました。
開発サイクルの早い段階で、最適ではないマッピングとエンティティの関係を使用していること、またはパフォーマンス関連の設定が欠落していることを発見することを想像してください。
さらに、Hypersistence Optimizer を使用すると、テスト中にそのような問題をすべて検出し、データ アクセス層のパフォーマンスに影響を与える変更が運用環境に展開されないようにすることができます。
Hypersistence Optimizer は、あなたが長い間待ち望んでいたツールです。
オンサイト トレーニングに興味がある場合は、1 日、2 日、または 3 日間のセッションに適応できる、ハイパフォーマンス Java Persistence トレーニングを提供します。詳細については、私のウェブサイトをご覧ください。
アプリケーションをレビューして、より高速に実行できるように最適化する方法についての洞察を提供してほしい場合は、私のコンサルティング ページをチェックしてください。
Java データベース アプリケーションを高速化する方法を最速で学習したい場合は、私のハイパフォーマンス Java Persistence ビデオ コースにぜひ登録してください。
あるいは、本を読むのが好きなら、私の『High-Performance Java Persistence』の本もきっと気に入っていただけるでしょう。
このプロジェクトでは、さまざまなモジュールがさまざまな Java バージョンを使用してコンパイルおよびテストされるため、Maven ツールチェーンを使用します。
Hypersistence Utils 6 には Java 11 が必要ですが、他のモジュールは Java 8 でコンパイルされます。
Maven ツールチェーンの構成方法については、この記事を参照してください。
プロジェクトは統合テストにさまざまなデータベース システムを使用し、 DatasourceProvider
インスタンス ( PostgreSQLDataSourceProvider
など) を使用して JDBC 接続設定を構成できます。プロジェクトは Testcontainers を使用して、必要な Oracle、SQL Server、PostgreSQL、または MySQL で Docker コンテナをブートストラップします。オンデマンドのインスタンス。
定期的なコントリビューターの場合は、必要なデータベースをローカルにセットアップするか、
docker
フォルダーで提供される Docker Compose 構成を使用することをお勧めします。オンデマンドでコンテナーをブートストラップすると速度が遅くなり、テストの実行に時間がかかるためです。
問題を修正したい場合、または新機能のサポートを追加したい場合は、改善が期待どおりに機能していることを証明する、関連する統合テスト ケースを提供してください。