tompouss Petit chat | 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 :
- @Setter
- @Getter
- @ManyToMany(fetch = FetchType.EAGER,
- cascade = { CascadeType.PERSIST,
- CascadeType.MERGE}
- )
- @JoinTable(name = "quiz_test", joinColumns = @JoinColumn(name = "id_quiz" ), inverseJoinColumns = @JoinColumn(name = "id_test" ))
- @JsonBackReference
- Set<TestEntity> tests = new HashSet<>();
|
Code :
- @Setter
- @ManyToMany(fetch = FetchType.EAGER,
- cascade = { CascadeType.PERSIST,
- CascadeType.MERGE,
- }
- )
- @JoinTable(name = "quiz_test",
- joinColumns = @JoinColumn(name = "id_test" ),
- inverseJoinColumns = @JoinColumn(name = "id_quiz" )
- )
- @JsonManagedReference
- @JsonInclude(JsonInclude.Include.NON_NULL)
- Set<QuizzEntity> quizzes = new HashSet<>();
|
le service TestService
Code :
- @Transactional
- public void addExistingQuiz(String testId, String quizzId) {
- // Find TestEntity and QuizzEntity
- TestEntity test = testRepository.findById(Integer.parseInt(testId))
- .orElseThrow(() -> new EntityNotFoundException("Test with id " + testId + " not found" ));
- QuizzEntity quiz = quizzRepository.findById(Integer.parseInt(quizzId))
- .orElseThrow(() -> new EntityNotFoundException("Quiz with id " + quizzId + " not found" ));
- // Check if the quiz is already associated with the test
- test.addQuizz(quiz);
- quiz.addTest(test);
- testRepository.saveAndFlush(test);
- quizzRepository.saveAndFlush(quiz);// save to update the relationship
- }
|
Voici le schéma DB:
Code :
- CREATE TABLE public.quiz_test (
- id INT primary key GENERATED ALWAYS AS IDENTITY,
- id_quiz int NOT NULL,
- id_test int NOT NULL,
- CONSTRAINT fk_quiz_test2_quizz FOREIGN KEY(id_quiz) REFERENCES public.quizz(id),
- CONSTRAINT fk_quiz_test2_test FOREIGN KEY(id_test) REFERENCES public.test(id)
- );
|
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
|