当前位置: 首页 > 知识库问答 >
问题:

HQL:处理特殊字符

殷烨
2023-03-14

我试图使用HQL从数据库中获取值,但由于值包含特殊字符,因此出现异常。我无法找出原因。

下面是我正在尝试的代码

    HotelMapping hotelMapping = null;
    SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
    Session session = sessionFactory.openSession();

    Transaction tx = session.getTransaction();
    tx.begin();
    String hotelName = "A Fisher's Inn Motel";
    Query query = session.createQuery("from HotelMapping hm where hm.hotelID.hotelName='"+hotelName+"'");
    HotelMapping mapping = query.uniqueResult();
    }
    tx.rollback();

    sessionFactory.close();

POJO如下所示:Hotel.java

public class Hotel{
    String hotelName;
    double price;
    //getters and setters
}

HotelMapping.java

public class HotelMapping{

     @OneToOne(cascade = CascadeType.ALL)
     Hotel hoteID

     String location;
}

查询字符串

查询=会话。createQuery(“来自HotelMapping hm,其中hm.hotelID.hotelName='“hotelName”'” 给出以下异常:

Exception in thread "main" org.hibernate.QueryException: expecting ''', found '<EOF>' [from com.pb.model.HotelMapping hm where hm.hotelID.hotelName='A Fisher's Inn Motel']

我试着避开撇号,但没有成功。我甚至尝试设置查询参数,但再次出现异常

query.setParameter("hotelName", "A Fisher's Inn Motel");

它说异常在线程"main"org.hibernate.QueryParameterException:无法找到命名参数[hotelName]

如果有人能帮我实现特殊字符处理的通用解决方案,请?

共有1个答案

茅昀
2023-03-14

您不应该使用连接来传递这样的动态参数。这不仅效率低下,而且不健壮(因为参数值中的单引号使查询无效)并且不安全,因为恶意用户可以传递一个改变查询语义学的值(谷歌搜索“SQL注入攻击”)。

相反,请使用参数:

Query query = session.createQuery(
    "from HotelMapping hm where hm.hotelID.hotelName = :hotelName");
query.setString("hotelName", hotelName);
 类似资料:
  • 本文向大家介绍Java:String.split()特殊字符处理操作,包括了Java:String.split()特殊字符处理操作的使用技巧和注意事项,需要的朋友参考一下 一:需要特殊处理才能使用split()方法的字符 (1)需要使用"\\"或"[ ]"才能正确使用的字符集: ( ) [ ] { \ ? * + . ^ $ | (2)栗子: 二:如不处理直接使用可能会出错的情况 (1)"|" 和

  • 本文向大家介绍如何处理JSON中的特殊字符,包括了如何处理JSON中的特殊字符的使用技巧和注意事项,需要的朋友参考一下 JSON 是适用于 Ajax 应用程序的一种有效格式,原因是它使 JavaScript 对象和字符串值之间得以快速转换。由于 Ajax 应用程序非常适合将纯文本发送给服务器端程序并对应地接收纯文本,相比不能生成文本的 API,能生成文本的 API 自然更可取;而且,JSON 让您

  • 我正在开发Flex Java(客户机-服务器)应用程序,我遇到了一个问题。我向服务器发送路径参数并在JSP上接收它们,有时,这些参数具有特殊字符,如。我有一个我认为常见的问题,那些特殊字符在我的服务器上被错误接收。 我还检查了另一个问题,有同样的问题,比如这个或这个。 我已经尝试使用请求。setCharacterEncoding(“UTF-8”)用于接收参数(第一个问题的答案)。 我还尝试在服务器

  • 通过上面的例子,我们知道可以方便的通过定义方法的参数来处理查询中的参数。除此之外,我们还可以为方法添加某些特定类型的参数(如:Pageable和Sort)来动态的在查询中添加分页和排序。 Example 7. Using Pageable, Slice and Sort in query methods(查询中进行分页和排序) Page<User> findByLastname(String la

  • 我在我当前的项目中实现了一个搜索功能,我正在使用HQL作为repo方法——除了出于某种原因搜索特殊字符外,一切都很好,HQL没有逃逸它。 我发送的字符串搜索是 abc_xyz(YYYYMM[t-2]-YYYYMM[t-1])_[xyz]HU. xlsx 调试步骤 在发送到Repo之前-我确实用以下字符替换了所有特殊字符-newsearchString是传递给Repo的字符串 我也试过了,没有替换特

  • 问题内容: 如何在oData中的以下查询中处理&符号? 我正在使用EF3.5和SQL2008。当我将其发送到oData服务时,没有任何数据返回。 问题答案: 这是在通过HTTP发送到SQL Server之前应该编码的字符列表: http://msdn.microsoft.com/zh- CN/library/aa226544(SQL.80).aspx 是的,“&”符号就是其中之一。