如何使用hibernate和可选参数进行查询?

时间:2015-08-20 17:41:02

标签: java hibernate

是否可以使用可选参数编​​写select查询?

示例:基本上我想使用以下查询获取:

SELECT p from Person p where p.firstname = :firstname and p.lastname = :lastname;

但如果这不会返回结果,我想通过姓氏查询

这可能在一个查询中吗? 或者我应该在开放交易中执行额外的查询吗?

1 个答案:

答案 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
);