Установите все свойства пустых строк в нуль - PullRequest
3 голосов
/ 21 декабря 2011

Я использую Hibernate Query by Example (QbE) с pojo, имеющим много свойств String, а также другие свойства, такие как Boolean, Date и т. Д.

Проблема в том, что я создаюстраница поиска для этой сущности, где пользователь может установить значения фильтров для всех полей, но если пользователь оставит поле String пустым, Hibernate включит это свойство в запрос, что приведет к нарушению результатов.

Я знаю, что яМожно проверить свойство по свойству, чтобы увидеть, является ли оно пустым, и исключить свойство или установить в ноль.Но это кажется уродливым решением.

Я хотел бы знать, возможно ли вообще проверить все эти свойства Strings и установить их как null, если пусто.Как я могу сделать это красивым способом?

Спасибо заранее!

1 Ответ

5 голосов
/ 21 декабря 2011

Если вы используете Hibernate напрямую:

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

EDIT

Вы можете легко аннулировать все свои пустые поля String с помощью следующего кода:

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);
        }
    }

}

}

А теперь excludeZeroes будет работать как положено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...