Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.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 将数据注册到多对多关系表中_Spring_Spring Mvc_Spring Boot_Jhipster - Fatal编程技术网

Spring 将数据注册到多对多关系表中

Spring 将数据注册到多对多关系表中,spring,spring-mvc,spring-boot,jhipster,Spring,Spring Mvc,Spring Boot,Jhipster,我有“课程”和“学生”实体。他们有多对多的关系。所以,我有一个COURSE_STUDENT(包含“STUDENT_id”和“COURSE_id”列)表。我想使用按钮将学生注册到课程中。(例如,学生列出课程,然后单击“注册”按钮注册特定课程)。 当我想要创建新课程时,我会使用默认情况下来自JHipster的courseRepository和courseMapper。 但我没有课程学生的存储库和映射器文件。因为它实际上不是一个主要实体。它是为多对多关系创建的。 如何为学生注册课程 吉特回购: 我的课

我有“课程”和“学生”实体。他们有多对多的关系。所以,我有一个COURSE_STUDENT(包含“STUDENT_id”和“COURSE_id”列)表。我想使用按钮将学生注册到课程中。(例如,学生列出课程,然后单击“注册”按钮注册特定课程)。 当我想要创建新课程时,我会使用默认情况下来自JHipster的courseRepository和courseMapper。 但我没有课程学生的存储库和映射器文件。因为它实际上不是一个主要实体。它是为多对多关系创建的。 如何为学生注册课程

吉特回购:

我的课程实体:

@Entity
@Table(name = "course")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Course implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@NotNull
@Column(name = "title", nullable = false)
private String title;

@Column(name = "description")
private String description;

@ManyToOne
private Instructor instructor;

@ManyToMany(fetch = FetchType.EAGER)
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@JoinTable(name = "course_student",
           joinColumns = @JoinColumn(name="courses_id", referencedColumnName="id"),
           inverseJoinColumns = @JoinColumn(name="students_id", referencedColumnName="id"))
private Set<Student> students = new HashSet<>();
@实体
@表(name=“course”)
@缓存(用法=缓存并发策略。非严格读写)
公共类课程实现可序列化{
私有静态最终长serialVersionUID=1L;
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
私人长id;
@NotNull
@列(name=“title”,null=false)
私有字符串标题;
@列(name=“description”)
私有字符串描述;
@许多酮
私人教练;
@ManyToMany(fetch=FetchType.EAGER)
@缓存(用法=缓存并发策略。非严格读写)
@JoinTable(name=“课程\学生”,
joinColumns=@JoinColumn(name=“courses\u id”,referencedColumnName=“id”),
inverseJoinColumns=@JoinColumn(name=“students\u id”,referencedColumnName=“id”))
private Set students=new HashSet();
学生实体:

    @Entity
@Table(name = "student")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Student implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@OneToOne
@JoinColumn(unique = true)
private User user;

@ManyToMany(fetch = FetchType.EAGER,mappedBy = "students")
@JsonIgnore
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
private Set<Course> courses = new HashSet<>();
@实体
@表(name=“student”)
@缓存(用法=缓存并发策略。非严格读写)
公共类学生实现可序列化{
私有静态最终长serialVersionUID=1L;
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
私人长id;
@奥内托内
@JoinColumn(unique=true)
私人用户;
@ManyToMany(fetch=FetchType.EAGER,mappedBy=“students”)
@杰索尼奥雷
@缓存(用法=缓存并发策略。非严格读写)
私有集课程=新HashSet();
例如,带有映射器和存储库的Createcourse函数

    @PostMapping("/courses")
@Timed
public ResponseEntity<CourseDTO> createCourse(@Valid @RequestBody CourseDTO courseDTO) throws URISyntaxException {
    log.debug("REST request to save Course : {}", courseDTO);
    if (courseDTO.getId() != null) {
        return ResponseEntity.badRequest().headers(HeaderUtil.createFailureAlert(ENTITY_NAME, "idexists", "A new course cannot already have an ID")).body(null);
    }
    Course course = courseMapper.toEntity(courseDTO);
    course = courseRepository.save(course);
    CourseDTO result = courseMapper.toDto(course);
    return ResponseEntity.created(new URI("/api/courses/" + result.getId()))
        .headers(HeaderUtil.createEntityCreationAlert(ENTITY_NAME, result.getId().toString()))
        .body(result);
}
@PostMapping(“/courses”)
@定时
public ResponseEntity createCourse(@Valid@RequestBody CourseDTO CourseDTO)抛出URI语法异常{
debug(“保存课程的REST请求:{}”,courseDTO);
if(courseDTO.getId()!=null){
return ResponseEntity.badRequest().headers(HeaderUtil.createFailureAlert(实体名称,“idexists”,“新课程不能已经有ID”)).body(null);
}
课程=课程表至实体(课程至);
课程=课程存储。保存(课程);
CourseDTO结果=courseMapper.toDto(课程);
return ResponseEntity.created(新URI(“/api/courses/”+result.getId()))
.headers(HeaderUtil.createEntityCreationErt(实体名称,result.getId().toString())
.机构(结果);
}

关系由课程实体所有。这是因为在学生端,
@manytomy
注释具有
mappedBy
属性。这意味着数据库将反映课程中的集合。您需要将学生添加到该集合以保存关系。该更改需要在事务中完成

也就是说,最好在这里遵循DDD。我将在学生类中创建一个将课程作为参数的
registerTo
方法。然后我将调用
this.courses.add(course)
course.getStudents()。在该方法中添加(this)