dig*_*nie 3 java sql jpa playframework
假设我有一个像这样使用 Play Framework 的 Model 类实现的 Student 实体:
@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;
...
}
Run Code Online (Sandbox Code Playgroud)
一个主题看起来像这样:
@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;
...
}
Run Code Online (Sandbox Code Playgroud)
有没有简单的方法使用 Play! (如果不是,否则最好的方法是什么)找到与特定学生至少有一个共同科目的所有学生?
所以让我们说:
我希望做一些像这样简单的事情:
List<Student> students = Student.find("subjects in ? and id <> ?", studentA.subjects, studentA.id).fetch();
Run Code Online (Sandbox Code Playgroud)
我希望返回两个学生:B 和 D(因为学生 B 和 D 至少有一个与学生 A 相同的科目,如通过上述查询传入)。
这是我将使用的 JPQL 查询:
select s from Student s
inner join s.subjects subject
where subject in (:subjectsOfStudentA)
and s != :studentA
Run Code Online (Sandbox Code Playgroud)
它与您的查询非常相似,但您需要一个连接才能在 where 子句中使用搜索到的学生的主题。
| 归档时间: |
|
| 查看次数: |
773 次 |
| 最近记录: |