Menentukan Entiti JPA

1. Pengenalan

Dalam tutorial ini, kita akan belajar mengenai asas entiti bersama dengan pelbagai anotasi yang menentukan dan menyesuaikan entiti dalam JPA.

2. Entiti

Entiti dalam JPA tidak lain adalah POJO yang mewakili data yang boleh disimpan ke pangkalan data. Entiti mewakili jadual yang disimpan dalam pangkalan data. Setiap contoh entiti mewakili baris dalam jadual.

2.1. The Entity Anotasi

Katakan kita mempunyai POJO yang disebut Pelajar yang mewakili data pelajar dan kita ingin menyimpannya dalam pangkalan data.

public class Student { // fields, getters and setters }

Untuk melakukan ini, kita harus menentukan entiti supaya JPA menyedarinya.

Oleh itu mari kita menentukannya dengan menggunakan anotasi @Entity . Kita mesti menyatakan penjelasan ini di peringkat kelas. Kita juga harus memastikan bahawa entiti itu mempunyai pembangun tanpa argumen dan kunci utama:

@Entity public class Student { // fields, getters and setters }

Nama entiti lalai dengan nama kelas. Kita boleh menukar namanya menggunakan elemen nama .

@Entity(name="student") public class Student { // fields, getters and setters }

Oleh kerana pelbagai pelaksanaan JPA akan mencuba subclass entiti kami untuk menyediakan fungsinya, kelas entiti tidak boleh dinyatakan akhir .

2.2. The Id Anotasi

Setiap entiti JPA mesti mempunyai kunci utama yang mengenal pasti secara unik. The @Id anotasi mentakrifkan kunci utama. Kami dapat menghasilkan pengecam dengan cara yang berbeza yang ditentukan oleh anotasi @GeneratedValue .

Kita boleh memilih dari empat strategi penjanaan id dengan elemen strategi . Nilainya boleh AUTO, TABLE, SEQUENCE, atau IDENTITY.

@Entity public class Student { @Id @GeneratedValue(strategy=GenerationType.AUTO) private Long id; private String name; // getters and setters }

Sekiranya kita menentukan GenerationType . AUTO , penyedia JPA akan menggunakan strategi apa pun yang ingin dihasilkannya untuk mengenal pasti.

Sekiranya kita memberi anotasi bidang entiti, penyedia JPA akan menggunakan medan ini untuk mendapatkan dan menetapkan keadaan entiti. Selain Akses Lapangan, kami juga dapat melakukan Akses Properti atau Akses Campuran, yang memungkinkan kami menggunakan akses Medan dan Properti dalam entiti yang sama .

2.3. The Table Anotasi

Dalam kebanyakan kes, nama jadual dalam pangkalan data dan nama entiti tidak akan sama.

Dalam kes ini, kita dapat menentukan nama jadual menggunakan anotasi @Table :

@Entity @Table(name="STUDENT") public class Student { // fields, getters and setters }

Kita juga dapat menyebut skema menggunakan elemen skema :

@Entity @Table(name="STUDENT", schema="SCHOOL") public class Student { // fields, getters and setters }

Nama skema membantu membezakan satu set jadual dari yang lain,

Sekiranya kita tidak menggunakan anotasi @ Jadual , nama entiti akan dianggap sebagai nama jadual.

2.4. The Ruangan Anotasi

Sama seperti anotasi @ Jadual , kita boleh menggunakan anotasi @Column untuk menyebutkan perincian lajur dalam jadual.

The @column anotasi mempunyai banyak unsur-unsur seperti nama, panjang, nol, dan unik .

@Entity @Table(name="STUDENT") public class Student { @Id @GeneratedValue(strategy=GenerationType.AUTO) private Long id; @Column(name="STUDENT_NAME", length=50, nullable=false, unique=false) private String name; // other fields, getters and setters }

Yang nama elemen menentukan nama lajur dalam jadual. Yang panjang elemen menentukan panjangnya. The nol dinyatakan oleh elemen sama ada lajur adalah nol atau tidak, dan yang unik dinyatakan oleh elemen sama ada lajur adalah unik.

Sekiranya kita tidak menentukan anotasi ini, nama bidang akan dianggap sebagai nama lajur dalam jadual.

2.5. The Transient Anotasi

Kadang-kadang, kita mungkin mahu menjadikan bidang tidak berterusan Kami boleh menggunakan anotasi @Transient untuk melakukannya. Ini menetapkan bahawa lapangan tidak akan diteruskan.

Sebagai contoh, kita dapat mengira usia pelajar dari tarikh lahir.

Oleh itu, mari beri penjelasan mengenai usia lapangan dengan anotasi @Transient :

@Entity @Table(name="STUDENT") public class Student { @Id @GeneratedValue(strategy=GenerationType.AUTO) private Long id; @Column(name="STUDENT_NAME", length=50, nullable=false) private String name; @Transient private Integer age; // other fields, getters and setters }

Akibatnya, usia padang tidak akan berterusan hingga ke meja.

2.6. The Temporal Anotasi

Dalam beberapa kes, kita mungkin perlu menyimpan nilai temporal dalam jadual kita.

Untuk ini, kami mempunyai penjelasan @Temporal :

@Entity @Table(name="STUDENT") public class Student { @Id @GeneratedValue(strategy=GenerationType.AUTO) private Long id; @Column(name="STUDENT_NAME", length=50, nullable=false, unique=false) private String name; @Transient private Integer age; @Temporal(TemporalType.DATE) private Date birthDate; // other fields, getters and setters }

Walau bagaimanapun, dengan JPA 2.2, kami juga mempunyai sokongan untuk java.time.LocalDate, java.time.LocalTime, java.time.LocalDateTime, java.time.OffsetTime dan java.time.OffsetDateTime.

2.7. Yang disebut satu persatu Anotasi

Kadang-kadang, kita mungkin ingin mengekalkan jenis enum Java .

Kita boleh menggunakan anotasi @Enumerated untuk menentukan sama ada enum harus diteruskan dengan nama atau dengan ordinal (lalai).

public enum Gender { MALE, FEMALE } 
@Entity @Table(name="STUDENT") public class Student { @Id @GeneratedValue(strategy=GenerationType.AUTO) private Long id; @Column(name="STUDENT_NAME", length=50, nullable=false, unique=false) private String name; @Transient private Integer age; @Temporal(TemporalType.DATE) private Date birthDate; @Enumerated(EnumType.STRING) private Gender gender; // other fields, getters and setters }

Sebenarnya, kita tidak perlu menentukan penjelasan @Enumerated sama sekali jika kita akan meneruskan Jantina mengikut ordinal enum .

Namun, untuk mengekalkan Gender dengan nama enum , kami telah mengkonfigurasi anotasi dengan EnumType.STRING.

3. Kesimpulannya

Dalam artikel ini, kami mengetahui apakah entiti JPA dan bagaimana membuatnya. Kami juga mengetahui tentang anotasi yang berbeza yang dapat digunakan untuk menyesuaikan entiti dengan lebih jauh.

Kod lengkap untuk artikel ini boleh didapati di Github.