Lors de la création d'applications avec Spring Boot et JPA (Java Persistence API), la gestion des relations entre les entités est cruciale. Comprendre comment cartographier efficacement ces relations vous aidera à modéliser vos données avec précision et à effectuer des requêtes efficaces. Dans ce guide, nous explorerons les différents types de mappages JPA pris en charge par Spring Boot : un-à-un, un-à-plusieurs, plusieurs-à-un et plusieurs-à-plusieurs. Fournira un exemple sur les mappages unidirectionnels et bidirectionnels.
Dans une relation unidirectionnelle un-à-un, une entité en référence une autre sans que la deuxième entité connaisse la première.
Exemple :
// 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; }
Dans une relation bidirectionnelle un-à-un, les deux entités font référence l'une à l'autre.
Exemple :
// 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; }
Dans une relation un-à-plusieurs unidirectionnelle, une entité fait référence à une collection d'une autre entité.
Exemple :
// 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; }
Dans une relation bidirectionnelle un-à-plusieurs, les deux entités sont référencées l'une par rapport à l'autre.
Exemple :
// 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; }
Dans une relation plusieurs-à-un unidirectionnelle, plusieurs entités font référence à une seule entité.
Exemple :
// 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; }
Dans une relation plusieurs-à-un bidirectionnelle, l'entité référencée possède une collection d'entités référentes.
Exemple :
// 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; }
Dans une relation plusieurs-à-plusieurs unidirectionnelle, chaque entité possède une collection de l'autre, mais la relation n'est explicitement gérée par aucune des parties.
Exemple :
// 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; }
Dans une relation plusieurs-à-plusieurs bidirectionnelle, les deux entités se référencent mutuellement et la relation est explicitement gérée.
Exemple :
// 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; }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!