Как правильно получить List <Object>с отношениями ManyToMany с PostMapping? - PullRequest
0 голосов
/ 20 ноября 2018

Начал изучать Spring Framework (Spring Boot) и столкнулся с проблемой.Попытка назначить выбранных авторов для выполнения вновь созданной задачи.Как правильно получить отношения List<Object> с @ManyToMany с PostMapping?Вот мой простой код:

Сущность задачи:

@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;
}

Сущность пользователя:

@Entity @Data
@Table(name = "users")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long user_id;

    @ManyToMany
    @JoinTable(name="task_authors",
            joinColumns = @JoinColumn(name="user_id", referencedColumnName="user_id"),
            inverseJoinColumns = @JoinColumn(name="task_id", referencedColumnName="taskId")
    )
    private List<Task> taskList;
}

TaskController:

@PostMapping("/add")
public String addTask(
        @AuthenticationPrincipal UserDetails currentUser,
        @RequestParam("WebsiteId") Website website,
        @ModelAttribute Task task,
        @RequestParam("taskAuthors") List<User> taskAuthors
) {
    User owner = (User) userService.findUserByEmail(currentUser.getUsername());
    task.setOwnerId(owner.getUser_id());

    task.setUserList(taskAuthors);

    taskService.addTask(task);
    return "redirect:/tasks";
}

Пример таблицы:

+---------+---------+
| user_id | task_id |
+---------+---------+
|       1 |       5 |
|       2 |       5 |
|       3 |       5 |
+---------+---------+

При отправке формы задача создается, но таблица выше не заполняется.

Снимок экрана из вкладки "Сеть" в браузерах: enter image description here

Эта строка кода из GetMapping (форма отправки задания)

@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";
}

Где я ошибаюсь?Нужно ли создавать обертку?Заранее спасибо)

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

два варианта:

  • config cascadeType для пользователя

открытый класс пользователя {

@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;

}

  • обменяйте mappedBy и @ JoinTable
0 голосов
/ 21 ноября 2018

как вы определили отношения, пользователь является владельцем отношения, а задача является обратной стороной, поэтому добавление пользователей в задачу не приведет к созданию новых строк в базе данных.Если вы переместите «mappedBy» в User и JoinTable в Task, то Task станет владельцем отношения и будет делать то, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...