将所有空字符串属性设置为空
我正在使用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