gpt4 book ai didi

java - 使用 Play 寻找多对多实体交集的优雅方式

转载 作者:行者123 更新时间:2023-11-30 07:30:23 25 4
gpt4 key购买 nike

假设我有一个像这样使用 Play Framework 的模型类实现的学生实体:

@Entity
public class Student extends Model {

public String name;

@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "student_subject",
joinColumns = {@JoinColumn(name = "student_id", referencedColumnName = "id")},
inverseJoinColumns = {@JoinColumn(name = "subject_id", referencedColumnName = "id")})
public List<Subject> subjects;

...
}

Subject 看起来像这样:

@Entity
public class Subject extends Model {

public String name;

@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "student_subject",
joinColumns = {@JoinColumn(name = "subject_id", referencedColumnName = "id")},
inverseJoinColumns = {@JoinColumn(name = "student_id", referencedColumnName = "id")})
public List<Student> students;

...
}

是否有使用 Play! 的简单方法? (如果不是,最好的方法是什么)找到与特定学生至少有一个共同科目的所有学生?

让我们说:

  • 学生 A 学习数学、科学和英语
  • 学生 B 做科学和英语
  • C 同学学法语
  • 学生 D 做数学和法语

我希望做一些像这样简单的事情:

List<Student> students = Student.find("subjects in ? and id <> ?", studentA.subjects, studentA.id).fetch();

我希望返回两个学生:B 和 D(因为学生 B 和 D 至少有一个与学生 A 相同的科目,通过上面的查询传入)。

最佳答案

这是我将使用的 JPQL 查询:

select s from Student s
inner join s.subjects subject
where subject in (:subjectsOfStudentA)
and s != :studentA

它与您的查询非常相似,但您需要一个连接才能在 where 子句中使用搜索到的学生的主题。

关于java - 使用 Play 寻找多对多实体交集的优雅方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7898960/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com