0

这是我的实体定义:

@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
4

0 回答 0