2011-12-21 6 views
2

をnullにすべての空の文字列プロパティを設定します。そのエンティティの検索ページを作成しています。ユーザーはすべてのフィールドのフィルタ値を設定できますが、ユーザーがStringフィールドを空のままにしておくと、Hibernateはこのプロパティをクエリに組み込み、結果を破棄します。は、私は文字列プロパティの多くを持ってPOJOで例(QBE)によって、休止状態のクエリを使用していますし、また問題がなどブール、日付、などの他のプロパティ</p> <p>ある

プロパティでプロパティをチェックして、プロパティが空であるかどうかを確認したり、プロパティを除外したり、nullに設定することができます。しかし、これは醜い解決策と思われます。

一般的にすべてのStringプロパティをチェックし、空の場合はnullに設定できるかどうかを知りたいです。どのように私はこれを美しい方法で行うことができますか?

ありがとうございました!

答えて

4

あなたが直接Hibernateを使用している場合:

public class ReflectionUtils { 

public static void nullifyStrings(Object o) { 

    for (Field f : o.getClass().getDeclaredFields()) { 
     f.setAccessible(true); 
     try { 
      if (f.getType().equals(String.class)) { 
       String value = (String) f.get(o); 
       if (value != null && value.trim().isEmpty()) { 
        f.set(o , null); 
       } 
      } 
     } catch (Exception e) { 
      throw new RuntimeException(e); 
     } 
    } 

} 

} 

そして今

ReflectionUtils.nullifyStrings(o); 
Example example = Example.create(yourObject) 
     .excludeZeroes() 
     .enableLike() 
     .list(); 

EDIT

あなたは簡単に次のコードですべてのあなたの空の文字列フィールドを無効にすることができますexcludeZeroesは期待どおりに動作します。

+0

回答ありがとう、私はすでにこれを試して、そしてdoesntの仕事。 –

+0

答えを更新しました。 –

+0

ありがとうMaurícioLinharesは、今は魅力のように動作します! –

関連する問題