SpringJPA存储库查找不在多对多关系中的元素

tkclm6bt  于 2021-07-23  发布在  Java
关注(0)|答案(0)|浏览(237)

我已经在数据库实体之间建立了多对多关系。
在我的模型中,有校友、科目和科目\校友:

@Entity
public class Alumns {

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

    @OneToMany(mappedBy = "alumn")
    private List<Subjects_alumns> subjects;

    .......

@Entity
public class Subjects {

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

    @OneToMany(mappedBy = "subject")
    private List<Subjects_alumns> alumns; 

    ..........

@Entity
public class Subjects_alumns {

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

    @ManyToOne
    @JoinColumn(name = "id_subject")
    private Subjects subject;

    @ManyToOne
    @JoinColumn(name = "id_alumn")
    private Alumns alumn;
    ............

所以现在。。。在主题库上,我想建立一个方法,可以从给定的列表中检索每个没有主题成员的主题。

Something like this:

public interface SubjectsRepository extends CrudRepository<Subjects, Integer>{

    List<Subjects> findByAlumnsNotIn(List<Subjects_alumns> someAlumns);

}

因此,在我的控制器上,我可以通过给定的校友已经关联的主题来过滤我的主题,如下所示:

@GetMapping("enroll")
    public String enroll(@RequestParam(name = "id", required = true) Integer id, Model model) {

        //Get the alumn to enroll
        Alumns alumn = alumns.findOne(id);

        model.addAttribute("alumn", alumn);
        //Filter those subjects where is not enrolled already
        model.addAttribute("subjects", subjects.findByAlumnsNotIn(alumn.getSubjects()));

        return "enroll";
    }

这个想法对我来说非常简单,并且这个代码不会产生任何异常。除了findalumnsnotin()返回一个空列表外,其他都可以正常工作。所以我想知道我的代码或整个方法是否有问题。
有人能帮我吗?这是在spring上实现多对多关系的正确方法还是有更好的方法(我是java和spring的初学者)

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题