这是我的实体定义:
@EmbeddedId
private TeacherPK id;
//bi-directional many-to-one association to Exam
@OneToMany(mappedBy="teacher", fetch=FetchType.LAZY)
private List<Exam> exams;
//bi-directional many-to-one association to Subject
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="fkSubject", nullable=false, insertable=false, updatable=false)
private Subject subject;
//bi-directional many-to-one association to Professor
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="fkProfessor1", referencedColumnName = "idProfessor", nullable=false, insertable=false, updatable=false)
private Professor professor1;
//bi-directional many-to-one association to Professor
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="fkProfessor2", referencedColumnName = "idProfessor")
private Professor professor2;
//bi-directional many-to-one association to Professor
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="fkProfessor3", referencedColumnName = "idProfessor")
private Professor professor3;
现在我想获取所有有professor1.id、professor2.id 或professor3.id 等于指定id 的老师:
public List<Teacher> getTeacherByProfessor(Professor professor) {
Query query = em.createQuery("SELECT teacher FROM Teacher teacher WHERE teacher.professor1.idProfessor=:idProfessor OR " +
"(teacher.professor2 IS NOT NULL AND teacher.professor2.idProfessor=:idProfessor) OR (teacher.professor3 IS NOT NULL AND teacher.professor3.idProfessor=:idProfessor)");
query.setParameter("idProfessor", professor.getIdProfessor());
return (List<Teacher>) query.getResultList();
}
但是当我执行这个方法时,我只得到定义了所有三个教授的对象。如果professor3 为空,则该对象不包含在结果中。从实体定义可以看出,只有professor1不能为NULL。
编辑:
基本上我想用 JPQL 语句来做这个 SQL 语句(例如设置 7)
SELECT * FROM Teacher WHERE fkProfessor1 = 7 OR fkProfessor2 = 7 OR fkProfessor3 = 7