#SpringBoot hibernate.LazyInitializationExceptionに関して
Formから受け取った値を保存しようとした時に
以下のようなエラーが発生しました。
調べてみたところ Lazy で List にアクセスした際、すでに DB のコネクションが閉じてしまっていたために、データの Fetch ができない状況である様ですが、
どのように対応するのが適切かわかっていません。
どなたかお分かりの方ご教示いただけると幸いです。
@Transactionalをつけるという対処も見つけましたが、
どのクラスに@Transactionalをつけるべきなのでしょうか?
いまだ問題が解決していません。
何か情報をいただけると幸いです。
error
12020-03-11 16:10:22.774 ERROR 6491 --- [nio-8080-exec-7] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: tutors.domain.model.User.subjects, could not initialize proxy - no Session] with root cause 2 3org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: tutors.domain.model.User.subjects, could not initialize proxy - no Session 4
java
1@PostMapping("/profile/teacherEdit/") 2 String editTeacher(@Validated TeacherEditForm teacherEditForm, 3 @AuthenticationPrincipal LoginUserDetails userDetails, 4 Model model) { 5 List<Subject> subjectList = subjectRepository.findAll(); 6 7 //認証ユーザーより情報を取得 8 User user = userDetails.getUser(); 9 int userId = user.getUserId(); 10 11 //userにあるsubjectをremove 12 for(Subject sub:subjectList) { 13 user.removeSubject(sub); 14 } 15 //新しく教師の教科を保存 16 int[] selectedSubjects = teacherEditForm.getSelectedSubjects(); 17 for(int value:selectedSubjects) { 18 Subject subject = subjectRepository.findById(value).orElse(null); 19 user.addSubject(subject); 20 } 21 userRepository.save(user); 22 return "redirect:/profile/"+userId; 23 } 24}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。