Java Hibernate类查询问题

Java Hibernate类查询问题,java,sql,hibernate,hql,sql-like,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

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

String temp_name = "%'" +someValue + "'%";
我会为你工作的。我以前也有同样的问题。如果它不起作用,您应该使用
%
s。我认为在参数前面加一个
%
,是行不通的

%
符号可用于在模式前后定义通配符(模式中缺少字母)。因此,如果您将
%
放在字符串前面,您将在
someValue
之前查找缺少的字符串,请尝试以下操作:

sess().createQuery( “来自UserProfile,其中firstName类似于:temp_name”).setParameter(“temp_name”,“%”+someValue+“%”)

还有一个更简单的方法: String someValue=“someValue existinDb” 字符串temp_name=“%”+someValue+“%”; Query Query=session.createQuery(“来自UserProfile,firstName像什么?”);
query.setString(0,临时名称)

您应该使用:来进行这样的查询:效率更高,匹配结果的效果更好,从而产生更友好的应用程序。

您必须使用
“/%”而不是
“%”

试着在您要输入的临时名称的开头和结尾添加单引号forming@Renjith试过了还是没用,有例外吗?你的
somevalue existinDb
看起来怎么样?那么你建议我不要放任何%?我确实尝试将%放在末尾,但仍然没有结果。这不会使我的查询易于SQL注入。我不明白。它将如何导致SQL注入?欢迎使用!你能详细解释一下为什么这个答案是正确的吗?即使您似乎不需要它,解释可能对OP或未来有相同问题的访客非常有用。对不起,我打错了,它必须是“\%”。“%”是一个特殊字符,您必须使用“\%”使hibernate理解您希望在查询中添加“%”。