Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 如何正确获取列表<;对象>;与PostMapping有很多关系?_Spring_Spring Boot_Spring Data Jpa_Spring Data - Fatal编程技术网

Spring 如何正确获取列表<;对象>;与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;

开始学习spring框架(spring boot)并遇到问题。 正在尝试分配所选作者以执行新创建的任务。 如何正确获取与PostMapping的
@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


      非常感谢你,兄弟!你救了我的命)用交换mappedBy&@JoinTable使用了第二种变体。非常感谢你,兄弟!你救了我的命)通过交换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;
      }