当前位置: 首页 > 面试题库 >

休眠查询中的Unicode字符串

锺离飞鸣
2023-03-14
问题内容

在SQL中,您可以编写查询来搜索这样的人的名字:

SELECT * FROM Person P WHERE P.Name LIKE N'%ike%'

该查询将使用Unicode字符运行(假设“名称”列和数据库已设置为处理Unicode支持)。

我在由Hibernate(NHibernate)运行的HQL中有一个类似的查询。生成的查询如下所示:

SELECT P FROM SumTotal.TP.Models.Party.Person P join P.Demographics PD WHERE (PD.LastName LIKE '%カタカ%'  )

不幸的是,在HQL中的文字前面加一个“ N”会导致错误。我尝试转义字符串中的unicode字符,但仍然没有成功。

数据库正在接受并保存来自Hibernate的unicode字符。我已经能够成功地用unicode字符串填充对象,将其保存为Hibernate,然后在数据库中进行验证。在我看来,我不能在自定义查询中使用unicode字符串(或者我也假设使用命名查询)有点奇怪。

这是Hibernate(Nhibernate)的已知问题或局限性吗?您如何在HQL中使用unicode?

一些站点建议使用“条件”查询。由于我正在使用的框架中的限制,这是不可能的。


问题答案:

您是否尝试过使用参数:

IList<Person> people = session
    .CreateQuery("from Person p where p.Name like :name")
    .SetParameter("name", "%カタカ%")
    .List<Person>();

它们还具有保护查询免受SQL注入的优势。



 类似资料:
  • 问题内容: 当我使用sqldeveloper在oracle 10g中运行这样的查询时,它运行良好。 给我名字和国家。当我在hibernate状态下将其作为命名查询运行时,对于“国家/地区”,我只会得到“ C”而不是“加拿大”。 为什么会这样呢? 问题答案:

  • 问题内容: 我在使用Hibernate创建子查询时遇到问题。不幸的是Subqueries类几乎完全没有文档,因此我完全不知道如何将以下SQL转换为Hibernate Criteria: 我希望以下内容能够“正常工作”: 但不幸的是,事实并非如此。因此,看来我实际上必须使用Subqueries类来创建Criteria。但是我无法通过Google找到一个合理的例子,因此这使我在这里提出了疑问。 问题答

  • 问题内容: 当我尝试从数据库中删除条目时,使用 然后我可以执行以下操作: 1)如果该行存在于数据库中,则将执行两个SQL查询:一个选择,然后一个删除 2)如果数据库中不存在该行,则仅执行选择查询 但是同样,更新不是这种情况。无论是否存在数据库行,都只会执行更新查询。 请让我知道为什么这种行为用于删除操作。这不是性能问题,因为遇到了两个查询而不是一个查询? 编辑: 我正在使用休眠3.2.5 样例代码

  • 问题内容: 我已经使用Seam 2.2.1和MySQL编写了一个正在运行的应用程序。我现在尝试将应用程序连接到 Informix, 并且当我从 hibernate ()执行查询时,出现以下异常: org.hibernate.exception.genericjdbcexception无法执行查询 当我执行查询时,执行成功。 生成的sql是 选择前2个user0_.USER_ID作为USER1_12

  • 问题内容: 我一直在努力寻找可以通过JPA中的方法调用设置的所有提示的权威资源,但我的想法是空的。有人知道很好的参考吗? 问题答案: 请参阅“ 3.4.1.7。查询提示” 。

  • 问题内容: 我正在尝试从当前日期在任何给定月份的第一天和最后一天之间的表中提取信息。 我收到运行时错误“命名查询中的错误:Department.byDate” 我正在向您提供我认为可能导致问题的代码,如果需要任何其他代码,请在评论中告知我。 我的命名查询如下所示: 我在DAO中以一种类似于以下方式的方法使用此命名查询: 我获取月份的第一天和最后几天的方法如下: 问题答案: 在HQL / JPQL中