在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注入的优势。