【发布时间】:2020-02-04 14:41:00
【问题描述】:
在我的 Spring Boot 应用程序中,我有一个名为 User 的类:
@Data
@Entity
public class User {
@Id
Long userID;
...
@ManyToMany(mappedBy = "admins")
private List<ClassRoom> classRooms = new ArrayList<>();
}
我还有另一个名为 ClassRoom 的课程:
@Data
@Entity
public class ClassRoom {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
Long classRoomID;
...
@ManyToMany
@JoinTable(name ="classroom_admins",
joinColumns = @JoinColumn(name = "classroom_id"),
inverseJoinColumns = @JoinColumn(name = "user_id"))
private List<User> admins = new ArrayList<>();
}
在我的ClassRoomController 我有一个这样的方法:
@PostMapping("/class")
ClassRoom newClassRoom(@RequestBody User user) {
ClassRoom classRoom=new ClassRoom();
classRoom.getAdmins().add(user);
user.getClassRooms().add(classRoom);
logger.debug(classRoom);
logger.debug(user);
return repository.save(classRoom);
}
现在我发布了curl -X POST -H "Content-Type: application/json" -d "{ \"userID\":\"22\" }" http://localhost:8080/class
这个请求给了我错误,说:java.lang.StackOverflowError
我应该使用ToString.Exclude | JsonBackReference | @JsonManagedReference 或类似的东西,不确定,哪个是正确的,最好的,我应该使用哪个?
在我的UserController:
@PostMapping("user/{id}/c")
User addClassRoom(@PathVariable Long id,@RequestBody ClassRoom newClassRoom)
{
logger.debug(repository.findById(id));
return repository.findById(id)
.map(user -> {
user.getClassRooms().add(newClassRoom);
newClassRoom.getAdmins().add(user);
return repository.save(user);
})
.orElseGet(() -> {
return null;
});
}
我发布了这个curl -X POST -H "Content-Type: application/json" -d "{ }" http://localhost:8080/user/2/c
这在 ClassRoom 中创建了一个条目,但 User 有 [] ClassRoom 和 ClassRoom 有 [] admins 和 CLASSROOM_USER 表也是空的。
我该如何解决这个问题?
完整的控制台here。
【问题讨论】:
-
@buræquete 你有答案吗?你能帮帮我吗?
-
抱歉我才看到你的邮件,今天还有问题吗?
标签: spring spring-boot jpa spring-data-jpa many-to-many