Rumah >Java >javaTutorial >Memahami Pemetaan JPA dalam Spring Boot: Hubungan Satu-dengan-Satu, Satu-ke-Ramai, Banyak-ke-Satu dan Banyak-ke-Ramai
Apabila membina aplikasi dengan Spring Boot dan JPA (Java Persistence API), mengurus perhubungan antara entiti adalah penting. Memahami cara memetakan perhubungan ini dengan berkesan akan membantu anda memodelkan data anda dengan tepat dan melaksanakan pertanyaan yang cekap. Dalam panduan ini, kami akan meneroka pelbagai jenis pemetaan JPA yang disokong oleh Spring Boot: satu-ke-satu, satu-ke-banyak, banyak-ke-satu dan banyak-ke-banyak. Akan memberikan contoh pada pemetaan satu arah dan dua arah.
Dalam perhubungan satu-dengan-satu satu arah, satu entiti merujuk yang lain tanpa entiti kedua mengetahui tentang yang pertama.
Contoh:
// User.java import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.OneToOne; @Data @Entity public class User { @Id @GeneratedValue(stratergy = GenerationType.Identity) private Long id; private String username; @OneToOne(cascade = CascadeType.ALL) @JoinColumn(name = "fk_profile_id", referencedColumnName = "id") private Profile profile; } // Profile.java import javax.persistence.Entity; import javax.persistence.Id; @Data @Entity public class Profile { @Id @GeneratedValue(stratergy = GenerationType.Identity) private Long id; private String bio; }
Dalam hubungan satu dengan satu dua hala, kedua-dua entiti merujuk antara satu sama lain.
Contoh:
// User.java import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.OneToOne; @Data @Entity public class User { @Id @GeneratedValue(stratergy = GenerationType.Identity) private Long id; private String username; @OneToOne(mappedBy = "user", cascade = CascadeType.ALL) private Profile profile; } // Profile.java import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.OneToOne; import javax.persistence.JoinColumn; @Data @Entity public class Profile { @Id @GeneratedValue(stratergy = GenerationType.Identity) private Long id; private String bio; @OneToOne @JoinColumn(name = "user_id") private User user; }
Dalam perhubungan satu-ke-banyak satu arah, satu entiti merujuk koleksi entiti lain.
Contoh:
// Author.java import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.OneToMany; import java.util.List; @Entity @Data public class Author { @Id @GeneratedValue(stratergy = GenerationType.Identity) private Long id; private String name; @OneToMany(cascade = CascadeType.ALL) @JoinColumn(name = "fk_book_id", referencedColumnName = "id") private List<Book> books; } // Book.java import javax.persistence.Entity; import javax.persistence.Id; @Entity @Data public class Book { @Id private Long id; private String title; }
Dalam hubungan satu-ke-banyak dua hala, kedua-dua entiti dirujuk antara satu sama lain.
Contoh:
// Author.java import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.OneToMany; import javax.persistence.CascadeType; import javax.persistence.FetchType; import java.util.List; @Entity @Data public class Author { @Id @GeneratedValue(stratergy = GenerationType.Identity) private Long id; private String name; @OneToMany(mappedBy = "author", cascade = CascadeType.ALL, fetch = FetchType.EAGER) private List<Book> books; } // Book.java import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.ManyToOne; @Entity @Data public class Book { @Id @GeneratedValue(stratergy = GenerationType.Identity) private Long id; private String title; @ManyToOne(name = "fk_author_id", referencedColumnName = "id") private Author author; }
Dalam perhubungan banyak-dengan-satu satu arah, berbilang entiti merujuk kepada satu entiti.
Contoh:
// Order.java import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.ManyToOne; @Entity @Data public class Order { @Id @GeneratedValue(stratergy = GenerationType.Identity) private Long id; private String description; @ManyToOne private Customer customer; } // Customer.java import javax.persistence.Entity; import javax.persistence.Id; @Entity @Data public class Customer { @Id @GeneratedValue(stratergy = GenerationType.Identity) private Long id; private String name; }
Dalam hubungan banyak-dengan-satu dua hala, entiti yang dirujuk mempunyai koleksi entiti yang merujuk.
Contoh:
// Order.java import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.ManyToOne; @Entity @Data public class Order { @Id @GeneratedValue(stratergy = GenerationType.Identity) private Long id; private String description; @ManyToOne private Customer customer; } // Customer.java import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.OneToMany; import java.util.List; @Entity @Data public class Customer { @Id @GeneratedValue(stratergy = GenerationType.Identity) private Long id; private String name; @OneToMany(mappedBy = "customer") private List<Order> orders; }
Dalam perhubungan banyak-ke-banyak satu arah, setiap entiti mempunyai koleksi yang lain, tetapi hubungan itu tidak diuruskan secara eksplisit oleh mana-mana pihak.
Contoh:
// Student.java import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.ManyToMany; import java.util.Set; @Entity @Data public class Student { @Id @GeneratedValue(stratergy = GenerationType.Identity) private Long id; private String name; @ManyToMany private Set<Course> courses; } // Course.java import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.ManyToMany; import java.util.Set; @Entity @Data public class Course { @Id @GeneratedValue(stratergy = GenerationType.Identity) private Long id; private String title; @ManyToMany private Set<Student> students; }
Dalam hubungan banyak-ke-banyak dua hala, kedua-dua entiti merujuk antara satu sama lain dan hubungan itu diuruskan secara eksplisit.
Contoh:
// Student.java import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.ManyToMany; import java.util.Set; @Entity @Data public class Student { @Id @GeneratedValue(stratergy = GenerationType.Identity) private Long id; private String name; @ManyToMany(mappedBy = "students") private Set<Course> courses; } // Course.java import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.ManyToMany; import java.util.Set; @Entity @Data public class Course { @Id @GeneratedValue(stratergy = GenerationType.Identity) private Long id; private String title; @ManyToMany private Set<Student> students; }
Atas ialah kandungan terperinci Memahami Pemetaan JPA dalam Spring Boot: Hubungan Satu-dengan-Satu, Satu-ke-Ramai, Banyak-ke-Satu dan Banyak-ke-Ramai. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!