这是我的实体定义:
@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为null,则该对象不包含在结果中。从实体定义中可以看出,只有professor1不能为NULL。
修改
基本上我想用JPQL语句(例如set 7)
来做这个SQL语句SELECT * FROM Teacher WHERE fkProfessor1 = 7 OR fkProfessor2 = 7 OR fkProfessor3 = 7