简体   繁体   English

如何使用休眠和可选参数查询?

[英]How to query with hibernate and optional parameters?

Is it possible to write a select query with optional parameters? 是否可以编写带有可选参数的select查询?

Example: basically I want to fetch using the following query: 示例:基本上我想使用以下查询来获取:

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

But if this does not return a result, I want to query only by lastname. 但是,如果这不返回的结果,我想只能通过名字来查询。

Is that possible in a single query? 在单个查询中有可能吗? Or should I execute an additional query within an open transaction? 还是应该在未结交易中执行其他查询?

As stated in the question linked by @MWiesner, there is no way as far as I'm aware to do this in hibernate HQL. 如@MWiesner所链接的问题中所述,据我所知,在休眠的HQL中没有办法做到这一点。 However, if you're prepared to use hibernate to do a native query, you could use a case statement to achieve your aim. 但是,如果您准备使用休眠来执行本机查询,则可以使用case语句来实现您的目标。 For example, the following query will work in MySQL, and with a small amount of tweaking could be made to work in any SQL database. 例如,以下查询将在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
);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM