代码之家  ›  专栏  ›  技术社区  ›  Davi Resio

联系该实体的最佳方式是什么

  •  0
  • Davi Resio  · 技术社区  · 7 年前

    在我的spring boot应用程序中,我有一个从多个到多个与实体课程相关的用户实体(一个用户可以注册多个课程,一个课程可以有多个用户) 实体课程与实体类一对多相关(一门课程有几个类,但一个类只有一门课程)

    我正在用spring boot做我的应用程序,我要说的是,用户已经注册了一门课程,我只需要做:

    user.setCourse(course)
    userRepository.save(user)
    

    当将课程与用户关联时,我可以说他已注册该课程。但是如何将用户与一个类联系起来,例如知道他完成了哪些类?我可以充分利用这种用户关系,当然是一对多类,还是必须为多个用户与类创建多个关系?

    以下是一个实体的小示例,以更好地举例说明这种关系:

    @Entity
    public class User{
    
    private long id;
    private String name;
    private String password;
    @ManyToMany(mappedBy = “enrolledUser”, fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinTable
    private List enrolledCourse;
    
    //getters and setters
    }
    
    @Entity
    public class Course{
    
    private long id;
    private String name;
    private String description;
    @ManyToMany(mappedBy = “enrolledCourse”, fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinTable
    private List enrolledUser;
    @OnetoMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    private List aulas;
    //getters and setters
    }
    
    @Entity
    public class Class{
    
    private long id;
    private String name;
    private String content;
    @ManyToOne(mappedBy = “class”, fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinTable
    private Course course;
    //getters and setters
    }
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   humbaba    7 年前

    这里有很多错误。首先,您不能这样做:

    user.setCourse(course) userRepository.save(user)

    因为我们谈论的是一种多对多的关系。您可以这样做:

    user.courses.add(course)
    

    反之亦然

    course.users.add(user)
    

    然后可以保存用户。请按照此处的教程操作:

    https://www.callicoder.com/hibernate-spring-boot-jpa-many-to-many-mapping-example/

    并使用通用列表,如 List<Course> 而不仅仅是 List .实际上我建议使用 Set<Course> 在这种情况下。只需按照上面的教程操作即可。

    您可以定义 Class 作为包含所需额外列的联接表。看看这篇文章,了解如何定义这些额外的列:

    JPA 2.0 many-to-many with extra column