0

我目前正在创建一个用户定义的搜索,我的问题是,当涉及到普通 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 查询对象不会呈现与 SQL 查询相同的结果。为什么会这样?

4

4 回答 4

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

会为你工作。我以前也有同样的问题。如果它不工作,你应该玩弄%s。我认为将 a%放在参数的前面是行不通的。

%符号可用于在模式之前和之后定义通配符(模式中缺少的字母)。因此,如果您将%字符串放在前面,则您正在寻找之前缺少的字符串someValue

于 2013-01-24T11:22:57.157 回答
0

试试这个 :

sess().createQuery("from UserProfile where firstName LIKE :temp_name").setParameter("temp_name",'%' + someValue + '%');

还有一个更简单的方法: String someValue = "somevalue existsDb" String temp_name = "%" +someValue + "%"; 查询 query = session.createQuery(“来自 UserProfile where firstName LIKE ?”); query.setString(0, temp_name);

于 2013-01-24T11:48:23.863 回答
0

对于这样的查询,您应该使用Hibernate Search:效率更高,并且会更好地匹配结果,从而使应用程序更加用户友好。

于 2013-01-25T22:25:49.443 回答
0

您必须使用"/%"而不是"%"

于 2014-01-08T03:13:02.047 回答