Pemetaan Entiti dengan Anotasi JPA
Takrifkan @Entity, @Table, @Id, @GeneratedValue, @Column dan @Embedded untuk reka bentuk entiti yang kemas.
Pemetaan Entiti dengan Anotasi JPA ialah pelajaran Java Academy percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Java Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Java Academy merangkumi sejumlah 4 pelajaran.
Apakah Pemetaan Entiti JPA?
JPA (Jakarta Persistence API) memetakan kelas Java kepada jadual pangkalan data menggunakan anotasi. Hibernate ialah pembekal JPA yang paling biasa. Tiada DDL SQL diperlukan — JPA menjana skema daripada anotasi.
@Entity dan @Table
@Entity menandakan kelas sebagai entiti JPA. @Table menyesuaikan nama jadual, skema dan kekangan keunikan. Setiap entiti mesti mempunyai pembina tanpa argumen (boleh dilindungi).
@Entity
@Table(name = "users", uniqueConstraints = @UniqueConstraint(columnNames = "email"))
public class User {
// ...
protected User() {} // required by JPA
}@Id dan @GeneratedValue
@Id menandakan medan kunci utama. @GeneratedValue mengkonfigurasi strategi penjanaan automatik: IDENTITY (kenaikan automatik pangkalan data), SEQUENCE (jujukan pangkalan data, lebih baik untuk sisipan pukal), atau AUTO.
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
}@Column: Menyesuaikan Lajur
@Column menetapkan nama lajur, panjang, kebolehnolaan dan keunikan. Tanpanya, nama medan menjadi nama lajur.
@Column(name = "full_name", nullable = false, length = 100)
private String name;
@Column(name = "email", unique = true, nullable = false)
private String email;
@Column(name = "created_at", updatable = false)
private LocalDateTime createdAt;@Embedded dan @Embeddable
Ekstrak sekumpulan lajur ke dalam objek nilai yang boleh digunakan semula dan dianotasi dengan @Embeddable. Gunakan @Embedded dalam entiti untuk menyertakan medannya.
@Embeddable
public class Address {
private String street, city, country;
@Column(name = "zip_code") private String zipCode;
}
@Entity
public class User {
@Embedded private Address address;
}@Enumerated: Menyimpan Enumerasi
Simpan enumerasi sebagai rentetan namanya (STRING) atau integer ordinal (ORDINAL). Sentiasa gunakan STRING — ordinal rosak apabila nilai enumerasi disusun semula.
@Enumerated(EnumType.STRING)
@Column(nullable = false)
private UserStatus status; // stored as "ACTIVE", "INACTIVE", etc.@CreationTimestamp dan @UpdateTimestamp
Anotasi khusus Hibernate yang menetapkan cap masa secara automatik semasa sisipan dan kemas kini masing-masing — tiada keperluan untuk @PrePersist manual.
@CreationTimestamp
@Column(updatable = false)
private LocalDateTime createdAt;
@UpdateTimestamp
private LocalDateTime updatedAt;@Transient: Mengecualikan Medan
Medan yang dianotasi dengan @Transient tidak disimpan. Gunakannya untuk medan terbitan atau terhitung yang tidak sepatutnya disimpan dalam pangkalan data.
@Transient
public String getFullName() { return firstName + " " + lastName; }@Lob: Objek Besar
Gunakan @Lob untuk memetakan lajur teks besar (TEXT/CLOB) atau binari (BLOB). PostgreSQL memetakan @Lob String kepada TEXT.
@Lob
@Column(name = "content")
private String content; // maps to TEXT in PostgreSQLKontrak equals dan hashCode
Entiti JPA dalam koleksi mesti melaksanakan equals / hashCode berdasarkan kunci perniagaan (bukan ID yang dijana, yang belum mempunyai nilai sebelum disimpan). Gunakan @NaturalId atau kunci gantian UUID.
@Override public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof User u)) return false;
return email != null && email.equals(u.email);
}
@Override public int hashCode() { return getClass().hashCode(); }@Version untuk Penguncian Optimistik
Tambahkan medan @Version. Hibernate menaikkannya pada setiap kemas kini. Jika dua transaksi mengemas kini baris yang sama secara serentak, transaksi kedua melontarkan OptimisticLockException.
@Version
private Long version; // auto-managed by HibernateSemakan Pantas
Mengapakah @Enumerated patut menggunakan STRING dan bukannya ORDINAL?
Rumusan
Gunakan @Entity/@Table untuk pemetaan kelas kepada jadual. @Id+@GeneratedValue untuk kunci utama. @Column untuk kekangan. @Embedded untuk objek nilai. Sentiasa gunakan @Enumerated(STRING). Tambahkan @Version untuk penguncian optimistik.
Pelajari Java dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 104
- Pelajaran
- 374
Soalan Lazim
Adakah pelajaran “Pemetaan Entiti dengan Anotasi JPA” percuma?
Ya — teks penuh “Pemetaan Entiti dengan Anotasi JPA” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Java Academy, tingkat taraf kepada CoddyKit PRO. Kursus Java Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Pemetaan Entiti dengan Anotasi JPA”?
Takrifkan @Entity, @Table, @Id, @GeneratedValue, @Column dan @Embedded untuk reka bentuk entiti yang kemas. Anda berlatih Java Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Java Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Java Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 4.
Berapa lamakah pelajaran “Pemetaan Entiti dengan Anotasi JPA” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Java Academy ini?
Ya. Setiap pelajaran Java Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Pemetaan Entiti dengan Anotasi JPA
- Repositori Spring Data dan Kaedah Pertanyaan
- Hubungan One-to-Many dan Many-to-Many
- Penomboran, Pengisihan dan Unjuran