hql中的案例条件

Case condition in hql

我想通过这个查询实现的是:始终执行“母亲”条件,但如果没有母亲,则执行“爸爸”条件,这可能吗?

"select name from Person where idParents = :idParents and"
                        + " CASE " + 
                        "       WHEN idMother !=NULL THEN idMother = :idMother " + 
                        "       ELSE idFather = :idFather " + 
                        "   END";

这个查询:

select name 
from Person 
where idParents = :idParents 
and 1 = case
  when idMother = :idMother then 1
  when idFather = :iidFather then 1 
end

将首先尝试通过将列 idMother:idMother 相匹配来加入。
如果这不可能,则将使用 idFather:idFather 的匹配项(如果存在)。

这个查询:

select name 
from Person 
where idParents = :idParents 
and 1 = case
  when idMother = :idMother then 1
  when idMother is null and idFather = :idFather then 1 
end

将首先尝试通过将列 idMother:idMother 相匹配来加入。
如果这不可能,则仅当 idMothernull 时,才会使用 idFather:idFather 的匹配项(如果存在)。

或者您可能想要这个:

select p.name 
from Person p
where p.idParents = :idParents 
and (
  p.idMother = :idMother
  or (
    p.idFather = :idFather
    and not exists (select 1 from Person where idParents = p.idParents and idMother = :idMother)
  )
)