spring jpa 存储库查找不是多对多关系的元素

问题描述

我已经在我的数据库实体之间建立了多对多的关系。

在我的模型中有 Alumns、Subjects 和 Subjects_alumns:

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

那么现在...在 Subjects 存储库中,我想建立一种方法,该方法能够从给定列表中检索每个没有 Subject_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() 返回一个空列表外,一切正常。所以我想知道我的代码或我的整个方法是否有问题。

谁能帮我解决这个问题?这是在春季启用多对多关系的正确方法还是有更好的方法? (我是java和spring的初学者)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)