在 SQL 中,我们可以编写一个查询来搜索人名,如下所示:
SELECT * FROM Person P WHERE P.Name LIKE N'%ike%'
该查询将使用 unicode 字符运行(假设名称列和数据库设置为处理 unicode 支持)。
我在 HQL 中有一个类似的查询,由 Hibernate (NHibernate) 运行。生成的查询如下所示:
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 注入的优势。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)