Не удалось написать JSON: не удалось лениво инициализировать коллекцию ролей?

#hibernate #jpa #spring-data-jpa #jackson #postman

#зимовать #jpa #весна-данные-jpa #джексон #почтальон

Вопрос:

Я попытался извлечь всех студентов (Etudiant) из EtudianController и получил эту ошибку. Это моя таблица моделей

 @Entity @Table(name = "etudiant") @JsonIgnoreType public class Etudiant implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long numInscription; private String nameETU; private String prenomETU; private String adresseETU; @CreationTimestamp private Date dateEntree; @ManyToMany @JoinTable(name = "course_etudiant", joinColumns = @JoinColumn, inverseJoinColumns = @JoinColumn) private Listlt;Coursgt; listCours; @ManyToMany(mappedBy = "listEtudiant") private Listlt;Enseignantgt; listEnseignant;  

Я генерирую все геттеры и сеттеры и пробовал с @jsonignore, и это сработало, но это не моя цель, я хочу показать всех этюдантов со списком курсов и впечатлений

Это модель, конечно

 @Entity @Table(name = "cours") public class Cours implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long codeC; private String libelleC;  @OneToOne(cascade = CascadeType.ALL) private Salle salleName;  @ManyToMany private Listlt;Etudiantgt; listEtu;  @OneToMany(mappedBy = "cours", cascade = CascadeType.ALL) private Listlt;Enseignantgt; listEnseignants;  

Это мой контроллер etudiant

 @RestController @RequestMapping(value = "/etudiant") public class EtudiantController { @Autowired private EtudiantService etudiantsService;  @GetMapping(value = "/findEtudiant/{id}") public Optionallt;Etudiantgt; findEtudiant(@PathVariable(value = "id") String id) {  return etudiantsService.findEtudiant(Long.parseLong(id)); }  @PostMapping("/addEtudiant") public Etudiant creeEtudiant(@RequestBody Etudiant etu) {  etudiantsService.saveEtudiant(etu);  return etu; }  @PutMapping("/updateEtudiant") public String UpdateEtudiant(@PathVariable @RequestBody Etudiant etu) {  etudiantsService.saveEtudiant(etu);  return "Student Updated Successfully !"; }  @GetMapping("/getAllEtudiant") public Listlt;Etudiantgt; getAllEtudiant() {  return etudiantsService.ListEtudiant(); }  @DeleteMapping(value = "/deleteEtudiant/{id}") public String deleteEtudiant(@PathVariable String id) {  etudiantsService.removeEtudiant(Long.parseLong(id));  return "Student Deleted Successfully"; }  

} Это моя реализация сервиса Etudiant

 public class EtudiantImp implements EtudiantService{   @Autowired EtudiantRepository etudiantRepository;  @Override public Listlt;Etudiantgt;ListEtudiant(){  return etudiantRepository.findAll(); }  @Override public void saveEtudiant (Etudiant c) {  etudiantRepository.save(c); }  @Override public void removeEtudiant(Long id) {  etudiantRepository.deleteById(id); } @Override public void updateEtudiant (Etudiant c) { etudiantRepository.save(c); } @Override public Optionallt;Etudiantgt; findEtudiant(Long Id) {  return etudiantRepository.findById(Id); }  

} Я также пробовал использовать Fetchtype, но это не работает, потому что это не похоже на класс «родители-дети», оба могут быть родителями, потому что это много разных отношений! Это точная ошибка в почтальоне:

Комментарии:

1. Исчезнет ли ошибка, если вы добавите fetch = FetchType.EAGER ее в Etudiant.listCours аннотацию @ManyToMany ? Покажите код, где загружается и где вы сериализуете. Вероятно, спящий режим загружает список лениво, и вы сериализуете его вне транзакции, что приводит к ошибке.

2. Я попробовал сделать это таким образом, и это тоже не работает, я не создавал пользовательский сериализатор, это случайное поведение Джексона и гибернации

3. Просто добавьте @JsonIgnore к Etudiant.listCours