我目前正在创建一个用户定义的搜索,我的问题是,当涉及到普通的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相同的结果。为什么会那样?
答案 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)
您必须使用"/%"
代替"%"