Hibernate查询就像问题一样

时间:2013-01-24 11:16:14

标签: java sql hibernate hql sql-like

我目前正在创建一个用户定义的搜索,我的问题是,当涉及到普通的sql(我在我的数据库中运行它)时它会返回一个结果,但是当涉及到HQL时它不会返回任何结果。

例子。我在SQL中做了这个查询。

SELECT * FROM USER_PROFILES WHERE FIRST_NAME LIKE '%somevalue existinDb%';

但是使用HQL查询对象

返回一个值
  String someValue = "somevalue existinDb"
    String temp_name = "%" +someValue + "%";
            System.out.println(temp_name);
            Query query =  sess().createQuery(
                    "from UserProfile where firstName  LIKE :temp_name").setParameter("temp_name",temp_name);

但是,HQL QUery对象不会呈现与SQL Query相同的结果。为什么会那样?

4 个答案:

答案 0 :(得分:1)

试试这个:

编码扩频通信()。的createQuery( “来自UserProfile,其中firstName LIKE:temp_name”)。setParameter(“temp_name”,'%'+ someValue +'%');

一个更简单的方法: String someValue =“somevalue existinDb” 字符串temp_name =“%”+ someValue +“%”; 查询query = session.createQuery(“来自UserProfile,其中firstName LIKE?”); query.setString(0,temp_name);

答案 1 :(得分:0)

String temp_name = "%'" +someValue + "'%";

会为你效劳。我之前遇到过同样的问题。如果它不起作用,你应该使用% s。我认为将%放在参数的前面是行不通的。

%符号可用于在模式之前和之后定义通配符(模式中缺少字母)。因此,如果您将%放在字符串的前面,那么您需要在someValue之前找到一些缺少的字符串。

答案 2 :(得分:0)

您应该使用Hibernate Search进行此类查询:效率更高,并且可以更好地匹配结果,从而使应用程序更加用户友好。

答案 3 :(得分:0)

您必须使用"/%"代替"%"