Spring 如何正确获取列表<;对象>;与PostMapping有很多关系?
开始学习spring框架(spring boot)并遇到问题。 正在尝试分配所选作者以执行新创建的任务。 如何正确获取与PostMapping的Spring 如何正确获取列表<;对象>;与PostMapping有很多关系?,spring,spring-boot,spring-data-jpa,spring-data,Spring,Spring Boot,Spring Data Jpa,Spring Data,开始学习spring框架(spring boot)并遇到问题。 正在尝试分配所选作者以执行新创建的任务。 如何正确获取与PostMapping的@manytomy关系的列表? 以下是我的简单代码: 任务实体: @Entity @Data @Table(name = "tasks") public class Task { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long taskId;
@manytomy
关系的列表
?
以下是我的简单代码:
任务实体:
@Entity @Data
@Table(name = "tasks")
public class Task {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long taskId;
@ManyToMany(fetch = FetchType.EAGER, mappedBy = "taskList")
private List<User> userList;
}
提交表单时,会创建任务,但不会填写上表
浏览器“网络”选项卡的屏幕截图:
这行代码来自GetMapping(任务提交表单)
我错在哪里?我需要创建一个包装器吗?提前感谢)按照您定义关系的方式,用户是关系的所有者,任务是相反的一方,因此向任务添加用户不会在数据库中创建任何新行。如果将“mappedBy”移动到User,将JoinTable移动到Task,则Task将成为关系的所有者,它将执行您想要的操作。按照您定义关系的方式,用户是关系的所有者,而Task是关系的反面,因此将用户添加到Task不会在数据库中创建任何新行。如果将“mappedBy”移动到User,将JoinTable移动到Task,则Task将成为关系的所有者,它将执行您想要的操作。您有两个选择:
- 为用户配置
cascadeType
public class User { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long user_id; //look here bro @ManyToMany(cascade = CascadeType.PERSIST) @JoinTable(name = "task_authors", joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "user_id"), inverseJoinColumns = @JoinColumn(name = "task_id", referencedColumnName = "taskId") ) private List<Task> taskList; }
公共类用户{ @身份证 @GeneratedValue(策略=GenerationType.AUTO) 专用长用户标识; //看这里,兄弟 @ManyToMany(cascade=CascadeType.PERSIST) @JoinTable(name=“task_authors”, joinColumns=@JoinColumn(name=“user\u id”,referencedColumnName=“user\u id”), inverseJoinColumns=@JoinColumn(name=“task\u id”,referencedColumnName=“task id”) ) 私人名单任务清单; }
- 交换
和mappedBy
@JoinTable
- 为用户配置
cascadeType
public class User { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long user_id; //look here bro @ManyToMany(cascade = CascadeType.PERSIST) @JoinTable(name = "task_authors", joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "user_id"), inverseJoinColumns = @JoinColumn(name = "task_id", referencedColumnName = "taskId") ) private List<Task> taskList; }
公共类用户{ @身份证 @GeneratedValue(策略=GenerationType.AUTO) 专用长用户标识; //看这里,兄弟 @ManyToMany(cascade=CascadeType.PERSIST) @JoinTable(name=“task_authors”, joinColumns=@JoinColumn(name=“user\u id”,referencedColumnName=“user\u id”), inverseJoinColumns=@JoinColumn(name=“task\u id”,referencedColumnName=“task id”) ) 私人名单任务清单; }
- 交换
和mappedBy
@JoinTable
- 您有两种选择:
+---------+---------+
| user_id | task_id |
+---------+---------+
| 1 | 5 |
| 2 | 5 |
| 3 | 5 |
+---------+---------+
@GetMapping("/add")
public String addTaskForm(
Model model,
@AuthenticationPrincipal UserDetails currentUser
) {
User user = (User) userService.findUserByEmail(currentUser.getUsername());
model.addAttribute("user", user);
model.addAttribute("authors",userService.getAllUsersAuthors(user.getUser_id()));
return "backend/add-task";
}
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long user_id;
//look here bro
@ManyToMany(cascade = CascadeType.PERSIST)
@JoinTable(name = "task_authors",
joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "user_id"),
inverseJoinColumns = @JoinColumn(name = "task_id", referencedColumnName = "taskId")
)
private List<Task> taskList;
}