2016-09-08 11 views
1

私はJPA(Hibernateの)における下部及び上部の機能に問題がある上で動作していません。私のアプリケーションでは、ユーザーはデータベースに新しい項目を追加する必要がありますが、名前は一意でなければなりません。これを達成するためには、ユーザが入力した文字列とデータベースの文字列を比較し、それを確認しながら大文字小文字を無視する必要があります。私は(それを比較するために)大文字にすべてのデータを作るために、Hibernateの機能を使用していますようHibernateの機能を下限と上限ポーランド特殊文字

残念ながら、すべてが同じままポーランドの特殊文字を除いて正常に動作します。

これは、私はそれが動作するかどうかを確認するために、テストの目的のために使用したコードです:

TypedQuery<String> query = em.createQuery("SELECT upper(i.name) FROM Item i", String.class); 

for (String name: query.getResultList()) 
    System.out.println(name); 

そして、それは私が何を得るのです。

  • CZYSTYBANDAż
  • マリーCHEMIK
  • MAECHYMECHANIK
  • SPRZęT
  • のŚPIWóR
  • ŚRODEKDEZYNFEKUJąCY
  • ŚRODEKCZYSZCZąCY

すべての文字は大文字にする必要があります。データベースでは、最初の単語の最初の文字が常に大文字になります。問題は、±、ę、ż、ź、ó、のような文字に関係しています。¡、Æ、Ż、¾、Ó、£のようになりますが、Hibernateはそれらを1文字それは事件に関してのみ異なる。

低い機能を使用しても同じことが起こります。ポーランド語の文字はまったく影響を受けず、同じままです。

それが唯一のポーランド語の文字を懸念や、あまりにも他の言語からかどうかは知りません。

私はこの問題で任意のヒントのために非常に感謝されます。

編集:私はSQLiteデータベースとドライバXerial 3.8.11.2での決勝にHibernate 5.2.2を使用しています。

EDIT2:私はHibernateでネイティブSQLクエリを使用していることを達成しようとすると、同じことが起こります。

+0

どのバージョンをお使いですか? –

+0

@khalilM私はHibernate 5.2.2 Finalite Xerial 3.8.11.2をSQLiteデータベースで使用しています:) – Bloodlex

+0

しかし、 "ł"はうまくいきますか? –

答えて

0

私はすでに解決策を見つけました。 SQLiteはUnicode照合をサポートしていないことが判明しました。下位の上位関数またはソートを使用している間は、ASCIIラテン文字のみをサポートできます。

Unicodeの照合順序(または他の照合順序)を使用するためにSQLiteをコンパイルする必要があるという拡張機能(SQLite ICU拡張機能)がありますが、私が望む限り単純な解決策ではありませんそうである。私は、データベースプロバイダをH2に変更することに決めました。これはデフォルトでUnicodeの照合をサポートしていますが、これは変更を行わずに済み、魅力のように動作します:)

これはHibernateの障害ではなくSQLiteです。大変ありがとうございます。