Hibernate 如何在hql搜索字符串中允许点字符?

Hibernate 如何在hql搜索字符串中允许点字符?,hibernate,hql,Hibernate,Hql,1: 2: 注意:不使用setParameter会产生正确的结果 在使用setParameter防止SQL注入时,如何允许hql搜索字符串中使用点字符 Ps:我正在使用Hibernate 5.2.6。您已经受到了sql注入的保护,因为您正在通过会话接口方法设置这些参数。您的查询将作为HQL进行计算,如果出现错误,将抛出异常,因此无法进行sql注入。sql注入将把这些参数连接(字符串连接)到本机(调用createSQLQuery方法)sql查询 顺便说一句,使用setString。但在我的代码中,

1:

2:

注意:不使用setParameter会产生正确的结果

在使用setParameter防止SQL注入时,如何允许hql搜索字符串中使用点字符


Ps:我正在使用Hibernate 5.2.6。您已经受到了sql注入的保护,因为您正在通过会话接口方法设置这些参数。您的查询将作为HQL进行计算,如果出现错误,将抛出异常,因此无法进行sql注入。sql注入将把这些参数连接(字符串连接)到本机(调用createSQLQuery方法)sql查询


顺便说一句,使用setString。

但在我的代码中,它在两种情况下都可以正常工作:

1)使用SetParameter():

Found Result
 List<Book> list = entityManager.createQuery("from Book b where b.name=:nm").setParameter("nm", "Mr.Angad").getResultList();
if(list == null || list.isEmpty())
    System.out.println("Record not found :( ");
else
    System.out.println("Record found :) ");

o/p: Record found :)
List List=entityManager.createQuery(“从b书中,其中b.name=:nm”).setParameter(“nm”,“Mr.Angad”).getResultList();
if(list==null | | list.isEmpty())
System.out.println(“未找到记录:(”);
其他的
System.out.println(“找到的记录:)”;
o/p:找到的记录:)
2)没有设置参数:

Found Result
 List<Book> list = entityManager.createQuery("from Book b where b.name=:nm").setParameter("nm", "Mr.Angad").getResultList();
if(list == null || list.isEmpty())
    System.out.println("Record not found :( ");
else
    System.out.println("Record found :) ");

o/p: Record found :)
List List=entityManager.createQuery(“从b书中,其中b.name='Mr.Angad')).getResultList();
if(list==null | | list.isEmpty())
System.out.println(“未找到记录:(”);
其他的
System.out.println(“找到的记录:)”;
o/p:找到的记录:)

1-hql不能防止sql注入参见2-setString已被弃用且不起作用,我的意思是产生与SetParameter相同的结果我没有说Hibernate可以完全防止sql注入,我写的是本机sql。我使用的是Hibernate 5和setString,它没有被弃用()。看看这篇文章,你是对的。。。由于hibernate 5.2,我们必须使用setParameter
Found Result
 List<Book> list = entityManager.createQuery("from Book b where b.name=:nm").setParameter("nm", "Mr.Angad").getResultList();
if(list == null || list.isEmpty())
    System.out.println("Record not found :( ");
else
    System.out.println("Record found :) ");

o/p: Record found :)
  List<Book> list = entityManager.createQuery("from Book b where b.name='Mr.Angad'").getResultList();
if(list == null || list.isEmpty())
    System.out.println("Record not found :( ");
else
    System.out.println("Record found :) ");

 o/p : Record found :)