Nama proyek diubah dari Hibernate Types menjadi Hypersistence Utils karena cakupan proyek sekarang jauh lebih luas, dan juga menawarkan utilitas Spring.
Oleh karena itu, saat bermigrasi dari Hibernate Types 2.x ke Hypersistence Utils 3.x, Anda perlu mengikuti langkah-langkah berikut:
com.vladmihalcea.hibernate
menjadi io.hypersistence.utils.hibernate
.com.vladmihalcea.spring
menjadi io.hypersistence.utils.spring
.Itu saja!
Proyek Hypersistence Utils memberi Anda utilitas tujuan umum untuk Spring dan Hibernate.
Keuntungan utama proyek ini adalah mendukung berbagai versi Hibernate, mulai dari Hibernate ORM 6.6 , 6.5 , 6.4 , 6.3 hingga 6.2 , 6.1 , 6.0 , 5.6 , dan Hibernate 5.5 .
Tergantung pada versi Hibernate yang Anda gunakan, Anda perlu menambahkan ketergantungan berikut:
<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>
Proyek Hypersistence Utils mendefinisikan daftar dependensi opsional yang harus Anda deklarasikan secara eksplisit dalam proyek Anda agar dapat menggunakannya.
Alasan mengapa semua dependensi ini bersifat opsional, seperti Guava, Jackson, atau PostgreSQL JDBC Driver, adalah karena tidak semua proyek memerlukannya.
Selain itu, versi ketergantungan sangat penting karena, dari waktu ke waktu, masalah keamanan mungkin ditemukan dan diperbaiki di versi yang lebih baru.
Jadi, mengandalkan perpustakaan ini untuk memberi Anda versi ketergantungan adalah hal yang sangat berbahaya untuk dilakukan.
Misalnya, ada 65 masalah keamanan yang ditemukan di perpustakaan Jackson Data Bind yang sangat diandalkan oleh proyek ini.
Untuk menghindari risiko masalah keamanan, Anda harus mengambil tanggung jawab untuk terus memutakhirkan semua dependensi yang Anda gunakan bersama dengan pustaka Hypersistence Utils.
Jika Anda menggunakan Tipe JSON, Anda mungkin tertarik untuk mengatur dependensi berikut berdasarkan versi Hibernate Anda:
< 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 >
Jika Anda memetakan Range
menggunakan Guava, maka Anda harus menyediakan ketergantungan Guava secara eksplisit:
< dependency >
< groupId >com.google.guava</ groupId >
< artifactId >guava</ artifactId >
< version >${guava.version}</ version >
</ dependency >
Jika Anda memetakan MonetaryAmount
, Anda harus memberikan ketergantungan Moneta secara eksplisit:
< dependency >
< groupId >org.javamoney</ groupId >
< artifactId >moneta</ artifactId >
< version >${moneta.version}</ version >
< type >pom</ type >
</ dependency >
Jika Anda memetakan tipe kolom khusus PostgreSQL (misal, inet
, hstore
, array
, interval
), maka Anda harus menyediakan ketergantungan PostgreSQL secara eksplisit:
< dependency >
< groupId >org.postgresql</ groupId >
< artifactId >postgresql</ artifactId >
< version >${postgresql.version}</ version >
</ dependency >
JsonType
memungkinkan Anda memetakan tipe kolom JSON, tidak peduli apakah Anda menggunakan Oracle, SQL Server, PostgreSQL, atau MySQL.
Jika Anda menggunakan Hibernate 6, Anda dapat memetakan kolom JSON apa pun ke properti entitas Map
, List
, POJO, String
, atau JsonNode
:
@ Type ( JsonType . class )
private Map < String , String > properties = new HashMap <>();
Jika Anda menggunakan Hibernate 5, Anda dapat memberikan nama Tipe Hibernate yang sepenuhnya memenuhi syarat:
@Type(type = "io.hypersistence.utils.hibernate.type.json.JsonType")
Atau, Anda dapat menambahkan pemetaan berikut ke kelas package-info.java
Anda dalam paket yang sama tempat entitas JPA Anda berada:
@ TypeDef (
name = "json" , typeClass = JsonType . class
)
package io . hypersistence . optimizer ;
import io . hypersistence . utils . hibernate . type . json . JsonType ;
import org . hibernate . annotations . TypeDef ;
Nantinya, Anda dapat memetakan properti entitas Map
, List
, POJO, String
, atau JsonNode
ke kolom JSON seperti ini:
@ Type ( type = "json" )
private Map < String , String > properties = new HashMap <>();
Untuk lebih jelasnya, lihat artikel ini.
Saat memetakan tipe kolom JSON ke
POJO
,List<POJO>
atauMap<String, POJO>
, Anda perlu memastikan bahwa tipePOJO
mengesampingkan metodeequals
danhashCode
default dan mengimplementasikannya sesuai dengan konten objek JSON.Jika tidak, mekanisme pemeriksaan kotor Hibernate dapat memicu pernyataan UPDATE yang tidak diharapkan. Lihat edisi #134 untuk lebih jelasnya.
Saat menggunakan Oracle, Anda memiliki beberapa opsi:
JsonType
generik yang bisa bekerja dengan tipe kolom JSON
, VARCHAR
, atau BLOB
, selama Anda memberi petunjuk tipe kolom menggunakan atribut columnDefinition
dari anotasi JPA @Column
.JsonStringType
untuk memetakan tipe kolom VARCHAR2
yang menyimpan JSON.JsonBlobType
untuk memetakan tipe kolom BLOB
yang menyimpan JSON.Untuk lebih jelasnya, lihat artikel ini.
Saat menggunakan SQL Server, Anda bisa menggunakan JsonType
generik atau JsonStringType
untuk memetakan tipe kolom NVARCHAR
yang menyimpan JSON.
Untuk lebih jelasnya, lihat artikel ini.
Saat menggunakan PostgreSQL, Anda dapat menggunakan JsonType
generik atau JsonBinaryType
untuk memetakan tipe kolom jsonb
dan json
.
Untuk lebih jelasnya, lihat artikel ini.
Saat menggunakan MySQL, Anda dapat menggunakan JsonType
generik atau JsonStringType
untuk memetakan tipe kolom json
.
Untuk lebih jelasnya, lihat artikel ini.
JsonNode
ke kolom JSONNo Dialect mapping for JDBC type: 1111
saat mencampur tipe JSON dengan kueri SQL aslicolumn is of type jsonb but expression is of type record
atau masalah bytea
List
Java dengan JPA dan HibernateDuration
Java dengan Hibernate MonetaryAmount
dengan JPA dan Hibernatejava.time.YearMonth
ke DATE atau INTEGERjava.time.Year
dan java.time.Month
dengan JPA dan HibernateCharacter
ke kolom CHAR yang dapat dibatalkanImmutableType
untuk menyederhanakan implementasi UserType
findAll
Anti-Pola@Retry
untuk mencoba lagi secara otomatis jika gagal BaseJpaRepository
adalah alternatif yang jauh lebih baik daripada Spring Data JpaRepository
default karena tidak menyediakan metode findAll
atau metode save
yang tidak masuk akal dalam terminologi JPA.
Untuk menggunakan utilitas BaseJpaRepository
, pastikan Anda menyediakan atribut repositoryBaseClass
di konfigurasi @EnableJpaRepositories
untuk mereferensikan BaseJpaRepositoryImpl
dari proyek Hypersistence Utils:
@ Configuration
@ EnableJpaRepositories (
value = "your.repository.package" ,
repositoryBaseClass = BaseJpaRepositoryImpl . class
)
public class JpaConfiguration {
...
}
your.repository.package
adalah paket Java dari repositori Spring Anda.
Meskipun BaseJpaRepository
lebih disukai, jika Anda perlu menggunakan JpaRepository
default, maka Anda setidaknya dapat memperluas HibernateRepository
juga untuk menghentikan metode yang dapat menyebabkan masalah.
Untuk menggunakan HibernateRepository
, pastikan Anda menyertakan paket io.hypersistence.utils.spring.repository
dalam konfigurasi @EnableJpaRepositories
Anda:
@ Configuration
@ EnableJpaRepositories (
value = {
"io.hypersistence.utils.spring.repository" ,
"your.repository.package" ,
...
}
)
public class JpaConfiguration {
...
}
your.repository.package
adalah paket Java dari repositori Spring Anda.
BatchSequenceGenerator
- Generator Urutan Batch Hibernasi CamelCaseToSnakeCaseNamingStrategy
- Cara memetakan properti camelCase ke nama kolom Snake_case dengan Hibernate ClassImportIntegrator
- Cara menulis kueri proyeksi DTO ringkas dengan JPAListResultTransformer
- Cara terbaik menggunakan Hibernate ResultTransformerMapResultTransformer
- Cara mengembalikan hasil Peta dari kueri JPA atau Hibernate SQLStatementCountValidator
- Cara mendeteksi masalah kueri Hibernate N+1 selama pengujian SQLExtract
- Cara mendapatkan kueri SQL dari Kriteria JPQL atau JPAQueryStackTraceLogger
- Cara menemukan sumber kueri SQL yang dihasilkan oleh HibernateProyek ini Gratis, seperti di Libre, bukan Gratis.
Tidak ada dukungan gratis. Hanya kode sumber dan binari yang tersedia secara gratis.
Jika Anda memerlukan bantuan untuk suatu masalah, Anda perlu membeli program Coaching Basic atau Coaching Pro.
Selain opsi dukungan Berbayar, Anda memiliki opsi untuk menyediakan perbaikan Anda sendiri. Untuk itu, inilah yang perlu Anda lakukan:
Namun, karena keterbatasan waktu, saya akan meninjau Permintaan Tarik yang dikirimkan dari waktu ke waktu, jadi Anda mungkin perlu menunggu beberapa bulan hingga Permintaan Tarik ditinjau dan diintegrasikan.
Bayangkan memiliki alat yang dapat mendeteksi secara otomatis jika Anda menggunakan JPA dan Hibernate dengan benar. Tidak ada lagi masalah kinerja, tidak perlu lagi menghabiskan waktu berjam-jam untuk mencari tahu mengapa aplikasi Anda hampir tidak dapat dirayapi.
Bayangkan ketika Anda mengetahui sejak awal selama siklus pengembangan bahwa Anda menggunakan pemetaan suboptimal dan hubungan entitas atau bahwa Anda kehilangan pengaturan terkait kinerja.
Terlebih lagi, dengan Hypersistence Optimizer, Anda dapat mendeteksi semua masalah tersebut selama pengujian dan memastikan Anda tidak menerapkan perubahan yang akan memengaruhi kinerja lapisan akses data ke produksi.
Pengoptimal Hipersistence adalah alat yang sudah lama Anda tunggu-tunggu!
Jika Anda tertarik dengan pelatihan di tempat, saya dapat menawarkan kepada Anda pelatihan Java Persistence Berkinerja Tinggi, yang dapat disesuaikan dengan sesi satu, dua, atau tiga hari. Untuk lebih jelasnya, lihat situs web saya.
Jika Anda ingin saya meninjau aplikasi Anda dan memberikan wawasan tentang bagaimana Anda dapat mengoptimalkannya agar berjalan lebih cepat, lihat halaman konsultasi saya.
Jika Anda menginginkan cara tercepat untuk mempelajari cara mempercepat aplikasi database Java, maka Anda harus mengikuti kursus video Java Persistence Berkinerja Tinggi saya.
Atau, jika Anda lebih suka membaca buku, Anda juga akan menyukai buku Kegigihan Java Berkinerja Tinggi saya.
Proyek ini menggunakan Maven Toolchains saat berbagai modul dikompilasi dan diuji menggunakan versi Java yang berbeda.
Hypersistence Utils 6 memerlukan Java 11 sedangkan modul lainnya dikompilasi dengan Java 8.
Untuk melihat cara mengonfigurasi Maven Toolchains, lihat artikel ini.
Proyek ini menggunakan berbagai sistem database untuk pengujian integrasi, dan Anda dapat mengonfigurasi pengaturan koneksi JDBC menggunakan instance DatasourceProvider
(misalnya, PostgreSQLDataSourceProvider
), dan proyek menggunakan Testcontainers untuk mem-bootstrap kontainer Docker dengan Oracle, SQL Server, PostgreSQL, atau MySQL yang diperlukan misalnya sesuai permintaan.
Jika Anda adalah kontributor tetap, disarankan untuk menyiapkan database yang diperlukan secara lokal atau menggunakan konfigurasi Docker Compose yang disediakan di folder
docker
, karena melakukan bootstrap pada container sesuai permintaan lebih lambat, dan pengujian Anda akan memakan waktu lebih lama untuk dijalankan.
Jika Anda ingin memperbaiki masalah atau menambahkan dukungan untuk fitur baru, berikan kasus uji integrasi terkait yang membuktikan bahwa peningkatan tersebut berfungsi seperti yang diharapkan.