Java Pojoでケースに依存しないフィールドを作成する方法。良いデザインを探しています。

StackOverflow https://stackoverflow.com/questions/4512758

質問

したがって、Higsaspaces XAPをHibernateプラグインで使用して、DBテーブルをグリッドキャッシュにロードします。残念ながら、グリッドを照会しても、ケースの鈍感な検索を直接サポートしていません。

彼らは2つのソリューションを提供しました:
1-クエリのように使用(SQLと同じ)が遅い(これを気にすることさえありません)
2-フィールドの個別のプロパティを作成します。ケースが鈍感になりたいと思います。

だから今私の選択は次のとおりです。
1- DBに追加の列を作成して、ケースに依存しないフィールドを持つ(この寿命ではありません)
2-データがロードされた瞬間にフィールドが「Tolower」Propepertyに保存されるように、XAP用のカスタムデータローダープラグインを作成します。 (サポートされていますが、最後の手段として去ります)

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

class Person {
    String firstName
    String firstNameLower

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

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

これは冬眠で動作しますか? Gigaspace Dataloaderは冬眠を使用し、私のPojoはほとんどエンティティクラスです。注釈ではなく、Hibernate XMLマッピングを使用しています。 「Tolower」フィールドはマッピングされません。 Hibernateは、マッピングされたすべてのフィールドでSetXxx()を呼び出しますか、またはフードの下で派手なコードの交換を行い、Setxxx()メソッドを呼び出しません。

また、ここでは注釈がうまくいかないと考えていますが、それらを実装する方法や、このケースで可能な場合でもわかりません。

役に立ちましたか?

解決 2

興味のある方のために。

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

他のヒント

hibernateはプロキシオブジェクトを使用しますが、データはまだオブジェクトに保存され、hibernateは提供するゲッター/セッターの実装を使用します。小文字バージョンを保存するための個別のインスタンス変数。

この記事 プロキシの基本を調べます。

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

あなたの場合、最良のソリューションは(higernateがGigaspaceにのみ使用される場合)、StandRD StringTypeを使用してカスタムタイプを定義してデータをロードしてから小文字に変換することにより、データのロード方法をカスタマイズすることです...

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top