0

そのため、GigaSpaces XAP と Hibernate プラグインを使用して DB テーブルをグリッド キャッシュにロードしています。残念ながら、グリッドのクエリでは、大文字と小文字を区別しない検索を直接サポートしていません。

彼らは2つの解決策を提供しました:
1-遅いLIKEクエリ(SQLと同じ)を使用します(これを気にする必要はありません)
2-大文字と小文字を区別しないフィールドの別のプロパティを作成します。


だから今私の選択肢は次のとおりです
。 「ToLower」プロパティ。(サポートされていますが、最後の手段として残します)

私は間違いなく#1には行きません。最終結果としてカスタムデータローダーを残します. だから私の考えは...

class Person {
    String firstName
    String firstNameLower

    public void setFirstName(String firstName) {
        this.firstName = firstName

        this.firstNameLower = firstName.toLowerCase(...);
    }
}

これは Hibernate で動作しますか? GigaSpace データローダは Hibernate を使用しており、私の pojo はほぼエンティティ クラスです。注釈ではなく、Hibernate XML マッピングを使用しています。「ToLower」フィールドはマップされません。Hibernate はマップされたすべてのフィールドで setXXX() を呼び出しますか、それとも内部で派手なコード置換を行い、setXXX() メソッドを呼び出しませんか。

また、ここで注釈を使用すると良いと思いますが、それらを実装する方法や、この場合に可能かどうかさえわかりません。

4

3 に答える 3

1

興味のある方へ。

フィールドの「tolower()」メソッドを作成し、それにインデックスアノテーションを追加するだけで、pojoをマップして通常の方法で休止状態にすることができます。

于 2011-01-18T17:12:38.603 に答える
1

hibernate はプロキシ オブジェクトを使用しますが、データは引き続きオブジェクトに保存され、hibernate は提供された getter/setter 実装を使用するため、小文字バージョンを設定する場合はソリューションが機能するはずですが、なぜ必要なのかはわかりません小文字バージョンを格納する別のインスタンス変数。

この記事では、プロキシの基本について説明します。

于 2010-12-22T19:21:11.940 に答える
0

フィールド アクセサー メソッドを使用する (フィールドに直接アクセスしない) ように Hibernate を構成すると、デフォルトの動作はすべての setXXX() メソッドを使用することになります。

あなたの場合、最善の解決策は(HibernateがGigaSpaceにのみ使用される場合)、標準のStringTypeを使用してカスタムタイプを定義してデータをロードし、それを小文字に変換することにより、Hibernateがデータをロードする方法をカスタマイズすることだと思います...

一方、システムで小文字のデータが必要な場合、データベースに入力されたすべての文字列が小文字であることを確認できませんか?

于 2010-12-22T19:17:59.663 に答える