Spring boot 3: relation many to many non sauvée en DB

Spring boot 3: relation many to many non sauvée en DB - Java - Programmation

Marsh Posté le 22-09-2024 à 17:32:12    

Bonjour,
 
j'ai un bug mystique avec une relation many to many avec Spring Boot 3
 
contexte:
 
j'ai 2 entités: une entité QuizzEntity liée à TestEntity par une relation plusieurs à plusieurs donc via une table intermédiaire
 

Code :
  1. @Setter
  2.     @Getter
  3.     @ManyToMany(fetch = FetchType.EAGER,
  4.                 cascade = { CascadeType.PERSIST,
  5.                             CascadeType.MERGE}
  6.     )
  7.     @JoinTable(name = "quiz_test", joinColumns = @JoinColumn(name = "id_quiz" ), inverseJoinColumns = @JoinColumn(name = "id_test" ))
  8.     @JsonBackReference
  9.     Set<TestEntity> tests = new HashSet<>();


 
 

Code :
  1. @Setter
  2.     @ManyToMany(fetch = FetchType.EAGER,
  3.                 cascade = { CascadeType.PERSIST,
  4.                             CascadeType.MERGE,
  5.                             }
  6.     )
  7.     @JoinTable(name = "quiz_test",
  8.                 joinColumns = @JoinColumn(name = "id_test" ),
  9.                 inverseJoinColumns = @JoinColumn(name = "id_quiz" )
  10.     )
  11.     @JsonManagedReference
  12.     @JsonInclude(JsonInclude.Include.NON_NULL)
  13.     Set<QuizzEntity> quizzes = new HashSet<>();


 
 
le service TestService
 

Code :
  1. @Transactional
  2.     public void addExistingQuiz(String testId, String quizzId) {
  3.         // Find TestEntity and QuizzEntity
  4.         TestEntity test = testRepository.findById(Integer.parseInt(testId))
  5.                 .orElseThrow(() -> new EntityNotFoundException("Test with id " + testId + " not found" ));
  6.         QuizzEntity quiz = quizzRepository.findById(Integer.parseInt(quizzId))
  7.                 .orElseThrow(() -> new EntityNotFoundException("Quiz with id " + quizzId + " not found" ));
  8.         // Check if the quiz is already associated with the test
  9.             test.addQuizz(quiz);
  10.             quiz.addTest(test);
  11.             testRepository.saveAndFlush(test);
  12.             quizzRepository.saveAndFlush(quiz);// save to update the relationship
  13.     }


 
Voici le schéma DB:
 

Code :
  1. CREATE TABLE public.quiz_test (
  2.     id INT primary key GENERATED ALWAYS AS IDENTITY,
  3.    id_quiz int NOT NULL,
  4.    id_test int NOT NULL,
  5.     CONSTRAINT fk_quiz_test2_quizz FOREIGN KEY(id_quiz) REFERENCES public.quizz(id),
  6.     CONSTRAINT fk_quiz_test2_test FOREIGN KEY(id_test) REFERENCES public.test(id)
  7. );


 
Quand je fais le test d'ajout avec un client http, tout semble ok, et le get me renvoie bien le test avec le quizz lié.
 
Par contre la table quiz_test reste désespéremment vide (même après redémarrage du pc)
 
Je pige pas  
 
Merci pour votre aide
 
Thomas

Reply

Marsh Posté le 22-09-2024 à 17:32:12   

Reply

Marsh Posté le 23-09-2024 à 13:10:00    

UPDATE:
 
en fait il faut préciser le schéma dans @JoinTable
ex:
@JoinTable(name = "quiz_test",
            schema = "public",
            joinColumns = @JoinColumn(name = "id_test", referencedColumnName = "id" ),
            inverseJoinColumns = @JoinColumn(name = "id_quiz", referencedColumnName = "id" ))


---------------
collectionneur de pâtes thermiques
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed