JPQL:选择属性可以为null的对象

时间:2012-04-21 17:17:35

标签: java hibernate java-ee-6 jpql

这是我的实体定义:

@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

0 个答案:

没有答案