在SQL一个可以编写查询,搜索一个名字的人这样的:

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

这种查询将unicode字(假定名称列和数据库设置处理unicode支助)。

我有一个类似的查询在非常运行的休眠(它能够).所产生查询看起来像:

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

不幸的是,把一个'N'前的文本在非常导致错误。我已经试过逃脱的unicode字符串中,仍然没有成功。

该数据库正在接受和保存unicode字符从冬眠。我已经能够成功地填充物unicode串,保存其与休眠,并进行验证的数据库。它似乎对我有点奇怪,我不能使用unicode字符串中定义的查询(或者我也假定名为查询)。

这是一个已知的问题或限制的休眠(它能够)?你怎么使用unicode在非常?

几个地点建议使用的标准查询。由于条件限制的框架内,我的工作中,这是不可能的。

有帮助吗?

解决方案

你有没有尝试与参数:

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

他们也有利用来保护您的查询对SQL注射。

其他提示

我找到一个解决方案,工作。我很怀疑这是最好的解决方案。但是,该解决方案,我将到实施,直到我可以授权一个重写整个查询建筑部分的软件,我的工作。

在该实例:

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

其条款包含了这种文字的:

'%カタカ%'

这个文本可以分成nchars其休眠(它能够)将在不知不觉中通过的SQL它产生。奇怪,但它的工作。因此以前的查询可以写为:

SELECT P FROM SumTotal.TP.Models.Party.Person P join P.Demographics PD WHERE (PD.LastName LIKE '%' + nchar(0x30AB) + nchar(0x30BF) + nchar(0x30AB)+ '%')

这个解决方案远远不是最佳的,因为它将需要经过每个字符,并确定如果它是一个多角色。然而,在这种情况下的这种代码生活在其程序中使用一个动态查询机程序的多个不同的标准在不同的操作。在例如我给它找unicode的任何地方。它是可能的,这种功能可以返回其条款的部分列为一个特定的数值或它可能寻找的起始字一串。该方法的基础的操作者使用一个操作者的类型和长期的手背一串。我可以改写,但这将是一个大的任务。上述修正将允许我来处理串通过成为这种方法。我提供这个方案,因为它的工作,但他的答案可能是最好的方式我可以找到。

这个问题的产生是因为它能够试图访问列没有类型的长度。因此在HBM.xml 其非常重要的更长于传统数据库,否则就会失败for UNIcode相关的东西。

谢谢, 尼

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top