Spring JPA @Embedded dan @EmbeddedId

1. Gambaran keseluruhan

Dalam tutorial ini, kita akan membahas penggunaan kaedah anotasi @EmbeddedId dan kaedah " findBy " untuk membuat pertanyaan mengenai entiti JPA berdasarkan kunci komposit.

Oleh itu, kami akan menggunakan anotasi @EmbeddeId dan @ Embeddable untuk mewakili kunci komposit dalam entiti JPA . Kita juga perlu menggunakan Spring JpaRepository untuk mencapai matlamat kita.

Kami akan menumpukan perhatian pada pertanyaan objek dengan kunci utama separa.

2. Keperluan untuk @Embeddable dan @EmbeddedId

Dalam perisian, kita menemui banyak kes penggunaan apabila kita perlu mempunyai kunci utama komposit untuk menentukan entri dalam jadual. Kekunci utama komposit ialah kunci yang menggunakan lebih daripada satu lajur untuk mengenal pasti baris dalam jadual secara unik .

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

3. Contoh

Pertimbangkan jadual buku , di mana rekod buku mempunyai kunci utama gabungan yang terdiri daripada pengarang dan nama . Kadang-kadang, kita mungkin ingin mencari buku dengan bahagian kunci utama. Sebagai contoh, pengguna mungkin ingin mencari buku hanya oleh pengarang tertentu . Kami akan belajar bagaimana melakukannya dengan JPA.

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

3.1. @Dipasukan

Mari tentukan kelas BookId kami di bahagian ini. Yang penulis dan nama akan menentukan yang unik BookId - kelas adalah Serializable dan melaksanakan kedua-dua sama rata dan Kodcincang kaedah:

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

3.2. @Entity dan @EmbeddedId

Entiti Buku kami mempunyai @EmbeddedId BookId dan bidang lain yang berkaitan dengan buku . BookId memberitahu JPA bahawa entiti Buku mempunyai kunci gabungan:

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

3.3. Repositori JPA dan Penamaan Kaedah

Marilah kita dengan cepat menentukan antara muka repositori JPA kami dengan memperluas JpaRepository dengan Buku entiti dan juga BookId :

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

Kami menggunakan sebahagian daripada nama medan pemboleh ubah id untuk mendapatkan kaedah pertanyaan Spring Data kami. Oleh itu, JPA menafsirkan pertanyaan utama utama separa sebagai:

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

4. Kesimpulan

JPA dapat digunakan untuk memetakan kunci komposit dengan cekap dan menanya melalui pertanyaan yang diperoleh.

Dalam artikel ini, kami melihat contoh kecil menjalankan carian medan id separa. Kami melihat anotasi @Embeddable untuk mewakili kunci utama komposit dan anotasi @EmbeddedId untuk memasukkan kunci komposit dalam entiti.

Akhirnya, kami melihat cara menggunakan kaedah JBRepository findBy yang diturunkan untuk mencari dengan medan id separa.

Seperti biasa, contoh kod untuk tutorial ini terdapat di GitHub.