Spring JPA @Embedded dan @EmbeddedId

1. Ikhtisar

Dalam tutorial ini, kita akan membahas penggunaan anotasi @EmbeddedId dan metode " findBy " untuk menanyakan entitas JPA berbasis kunci komposit.

Karenanya kami akan menggunakan anotasi @EmbeddeId dan @ Embeddable untuk merepresentasikan kunci komposit dalam entitas JPA . Kita juga perlu menggunakan Spring JpaRepository untuk mencapai tujuan kita.

Kami akan berkonsentrasi pada kueri objek dengan kunci utama parsial.

2. Perlu @Embeddable dan @EmbeddedId

Dalam perangkat lunak, kami menemukan banyak kasus penggunaan ketika kami perlu memiliki kunci utama komposit untuk menentukan entri dalam tabel. Kunci utama komposit adalah kunci yang menggunakan lebih dari satu kolom untuk mengidentifikasi baris dalam tabel secara unik .

Kami mewakili kunci utama komposit di Spring Data dengan menggunakan anotasi @Embeddable di kelas. Kunci ini kemudian disematkan di kelas entitas yang sesuai pada tabel sebagai kunci utama komposit dengan menggunakan anotasi @EmbeddedId pada bidang jenis @Embeddable .

3. Contoh

Pertimbangkan tabel buku , di mana catatan buku memiliki kunci primer komposit yang terdiri dari penulis dan nama . Terkadang, kami mungkin ingin mencari buku berdasarkan bagian dari kunci utama. Misalnya, pengguna mungkin ingin mencari buku hanya oleh penulis tertentu . Kami akan mempelajari cara melakukan ini dengan JPA.

Aplikasi utama kami akan terdiri dari BookId @Embeddable dan @Entity Book dengan @EmbeddedId BookId.

3.1. @Tokopedia

Mari kita definisikan kelas BookId kita di bagian ini. The penulis dan nama akan menentukan unik BookId - kelas adalah Serializable dan mengimplementasikan kedua equals dan hashCode metode:

@Embeddable public class BookId implements Serializable { private String author; private String name; // standard getters and setters }

3.2. @ Entity dan @EmbeddedId

Entitas Buku kami memiliki @EmbeddedId BookId dan bidang lain yang terkait dengan sebuah buku . BookId memberi tahu JPA bahwa entitas Buku memiliki kunci komposit:

@Entity public class Book { @EmbeddedId private BookId id; private String genre; private Integer price; //standard getters and setters }

3.3. Repositori JPA dan Penamaan Metode

Mari kita dengan cepat mendefinisikan antarmuka repositori JPA kita dengan memperluas JpaRepository dengan Buku entitas serta BookId :

@Repository public interface BookRepository extends JpaRepository { List findByIdName(String name); List findByIdAuthor(String author); }

Kami menggunakan bagian dari nama bidang variabel id untuk mendapatkan metode kueri Data Musim Semi kami. Karenanya, JPA menafsirkan kueri kunci primer parsial sebagai:

findByIdName -> directive "findBy" field "id.name" findByIdAuthor -> directive "findBy" field "id.author"

4. Kesimpulan

JPA dapat digunakan untuk memetakan kunci komposit secara efisien dan menanyakannya melalui kueri turunan.

Di artikel ini, kami melihat contoh kecil menjalankan pencarian kolom id parsial. Kami melihat anotasi @Embeddable untuk mewakili kunci utama komposit dan anotasi @EmbeddedId untuk memasukkan kunci komposit dalam suatu entitas.

Akhirnya, kita melihat bagaimana menggunakan metode turunan findBy JpaRepository untuk mencari dengan field id parsial.

Seperti biasa, kode contoh untuk tutorial ini tersedia di GitHub.