是否可以使用可选参数编写select
查询?
示例:基本上我想使用以下查询获取:
SELECT p from Person p where p.firstname = :firstname and p.lastname = :lastname;
但如果这不会返回结果,我想通过姓氏查询 。
这可能在一个查询中吗? 或者我应该在开放交易中执行额外的查询吗?
答案 0 :(得分:2)
正如@MWiesner链接的问题所述,在hibernate HQL中我无法做到这一点。但是,如果您准备使用hibernate执行本机查询,则可以使用case语句来实现您的目标。例如,以下查询将在MySQL中运行,并且可以在任何SQL数据库中进行少量调整。
SELECT *
FROM Person p
WHERE (
CASE (
SELECT COUNT(*)
FROM Person p2
WHERE p2.firstname = :firstname AND p2.lastname = :lastname
)
WHEN 0 THEN
p.lastname = :lastname
ELSE
p.firstname = :firstname AND p.lastname = :lastname
END
);