#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