framework-web:spring:relations

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
framework-web:spring:relations [2025/10/08 00:57] – [Schéma de base de données] jcheronframework-web:spring:relations [2025/10/08 01:24] (Version actuelle) – [Schéma de base de données] jcheron
Ligne 1: Ligne 1:
 ====== Relations JPA ====== ====== Relations JPA ======
  
-===== Les Types de Relations =====+===== Types de Relations =====
  
 ==== @OneToMany / @ManyToOne ==== ==== @OneToMany / @ManyToOne ====
Ligne 7: Ligne 7:
 Cas d'usage : Un auteur a plusieurs livres, un livre a un seul auteur. Cas d'usage : Un auteur a plusieurs livres, un livre a un seul auteur.
  
-=== Configuration Unidirectionnelle (❌ Rarement recommandée) ===+=== Configuration Unidirectionnelle (🟰 Rarement recommandée) ===
 <sxh java> <sxh java>
 @Entity @Entity
Ligne 529: Ligne 529:
 @Entity @Entity
 public class Author { public class Author {
-    @OneToMany(mappedBy = "author" // ❌ N'est PAS le owner+    @OneToMany(mappedBy = "author" // ❌ Non owner
     private List<Book> books;     private List<Book> books;
 } }
Ligne 536: Ligne 536:
 public class Book { public class Book {
     @ManyToOne     @ManyToOne
-    @JoinColumn(name = "author_id" // ✅ EST le owner+    @JoinColumn(name = "author_id" // ✅ Owner
     private Author author;     private Author author;
 } }
Ligne 551: Ligne 551:
     id BIGINT PRIMARY KEY,     id BIGINT PRIMARY KEY,
     title VARCHAR(255),     title VARCHAR(255),
-    author_id BIGINT,  -- ← LA CLÉ ÉTRANGÈRE EST ICI !+    author_id BIGINT,
     CONSTRAINT fk_author FOREIGN KEY (author_id) REFERENCES author(id)     CONSTRAINT fk_author FOREIGN KEY (author_id) REFERENCES author(id)
 ); );
Ligne 637: Ligne 637:
 **Problème** : Génère des requêtes supplémentaires ! **Problème** : Génère des requêtes supplémentaires !
  
-<code sql>+<sxh sql>
 INSERT INTO author (name) VALUES ('John Doe'); INSERT INTO author (name) VALUES ('John Doe');
 INSERT INTO book (title) VALUES ('Book 1'); INSERT INTO book (title) VALUES ('Book 1');
Ligne 645: Ligne 645:
 UPDATE book SET author_id = 1 WHERE id = 1; UPDATE book SET author_id = 1 WHERE id = 1;
 UPDATE book SET author_id = 1 WHERE id = 2; UPDATE book SET author_id = 1 WHERE id = 2;
-</code>+</sxh>
  
 === Configuration Bidirectionnelle (✅ Meilleure perf) === === Configuration Bidirectionnelle (✅ Meilleure perf) ===
Ligne 666: Ligne 666:
 **Requêtes optimisées** : **Requêtes optimisées** :
  
-<code sql>+<sxh sql>
 INSERT INTO author (name) VALUES ('John Doe'); INSERT INTO author (name) VALUES ('John Doe');
 INSERT INTO book (title, author_id) VALUES ('Book 1', 1);  -- ✅ FK directement INSERT INTO book (title, author_id) VALUES ('Book 1', 1);  -- ✅ FK directement
 INSERT INTO book (title, author_id) VALUES ('Book 2', 1);  -- ✅ Pas d'UPDATE INSERT INTO book (title, author_id) VALUES ('Book 2', 1);  -- ✅ Pas d'UPDATE
-</code>+</sxh>
  
 ==== ManyToMany : Qui est le owner ? ==== ==== ManyToMany : Qui est le owner ? ====
Ligne 736: Ligne 736:
 </sxh> </sxh>
  
-<code sql>+<sxh sql>
 SELECT * FROM book;                    -- Requête 1 SELECT * FROM book;                    -- Requête 1
 SELECT * FROM author WHERE id = 1;     -- Requête 2 SELECT * FROM author WHERE id = 1;     -- Requête 2
Ligne 742: Ligne 742:
 SELECT * FROM author WHERE id = 3;     -- Requête 4 SELECT * FROM author WHERE id = 3;     -- Requête 4
 ... ...
-</code>+</sxh>
  
 === Solution 1 : JOIN FETCH === === Solution 1 : JOIN FETCH ===
Ligne 762: Ligne 762:
 </sxh> </sxh>
  
-<code sql>+<sxh sql>
 -- ✅ Une seule requête ! -- ✅ Une seule requête !
 SELECT b.*, a.*  SELECT b.*, a.* 
 FROM book b  FROM book b 
 INNER JOIN author a ON b.author_id = a.id; INNER JOIN author a ON b.author_id = a.id;
-</code>+</sxh>
  
 === Solution 2 : @EntityGraph === === Solution 2 : @EntityGraph ===
Ligne 793: Ligne 793:
 </sxh> </sxh>
  
-<code sql>+<sxh sql>
 SELECT * FROM author;  -- Requête 1 SELECT * FROM author;  -- Requête 1
  
Ligne 800: Ligne 800:
     SELECT id FROM author     SELECT id FROM author
 ); );
-</code>+</sxh>
  
 ==== LazyInitializationException ==== ==== LazyInitializationException ====
Ligne 1013: Ligne 1013:
  
 ''application.properties'' : ''application.properties'' :
-<code>+<sxh bash>
 # Afficher les requêtes SQL # Afficher les requêtes SQL
 spring.jpa.show-sql=true spring.jpa.show-sql=true
Ligne 1023: Ligne 1023:
 # Détecter le problème N+1 # Détecter le problème N+1
 spring.jpa.properties.hibernate.session.events.log.LOG_QUERIES_SLOWER_THAN_MS=10 spring.jpa.properties.hibernate.session.events.log.LOG_QUERIES_SLOWER_THAN_MS=10
-</code>+</sxh>
  
  
  • framework-web/spring/relations.1759877866.txt.gz
  • Dernière modification : il y a 2 mois
  • de jcheron