SQL では、次のような人物の名前を検索するクエリを作成できます。
SELECT * FROM Person P WHERE P.Name LIKE N'%ike%'
このクエリは Unicode 文字で実行されます (Name 列とデータベースが 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 で保存し、データベースで検証することができました。カスタムクエリでユニコード文字列を使用できないのは少し奇妙に思えます (または、名前付きクエリも想定しています)。
これは Hibernate (Nhibernate) の既知の問題または制限ですか? HQLでユニコードをどのように使用しますか?
いくつかのサイトでは、Criteria クエリの使用を提案しています。私が取り組んでいるフレームワークの制約により、これは不可能です。