Java Academy · Pelajaran

Pemetaan Entiti dengan Anotasi JPA

Takrifkan @Entity, @Table, @Id, @GeneratedValue, @Column dan @Embedded untuk reka bentuk entiti yang kemas.

Pelajaran 1 daripada 413 langkah

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 PostgreSQL

Kontrak 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 Hibernate

Semakan 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.

Percuma untuk bermula

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

  1. Pemetaan Entiti dengan Anotasi JPA
  2. Repositori Spring Data dan Kaedah Pertanyaan
  3. Hubungan One-to-Many dan Many-to-Many
  4. Penomboran, Pengisihan dan Unjuran
← Kembali ke Java Academy