将所有空字符串属性设置为空

我正在使用Hibernate Query by Example(QbE),其中pojo具有很多String属性,还有另一个属性,如Boolean,Date等。

问题是我正在为该实体创建一个搜索页面,用户可以在其中为所有字段设置过滤器值,但如果用户将任何字符串字段留空,Hibernate会将此属性包含在查询中,从而破坏结果。

我知道我可以通过属性检查属性,看它是否为空,并排除属性或设置为null。 但这似乎是一个丑陋的决议。

我想知道是否可以通用地检查所有这些字符串属性,并且如果它是空的,则将它们设置为null。 我如何以美丽的方式做到这一点?

先谢谢了!


如果你直接使用Hibernate:

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

编辑

您可以使用以下代码轻松取消所有空字符串字段:

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

}

}

现在排除零位将按预期工作。

链接地址: http://www.djcxy.com/p/76163.html

上一篇: Set all empty strings properties to null

下一篇: Evaluating a math expression given in string form