一尘不染

休眠查询中的Unicode字符串

hibernate

在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?

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


阅读 244

收藏
2020-06-20

共1个答案

一尘不染

您是否尝试过使用参数:

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

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

2020-06-20