在某些情况下,Hibernate标准与所有内容匹配

时间:2011-01-20 15:46:03

标签: java hibernate criteria

是否可以执行类似

的操作
criteria.add(Expression.eq("product", " * "))  

它匹配一切吗?

如果你得到一个可以有很多值的变量和一个与所有东西相匹配的特殊值“all”,那将会很方便。所以你可以调用这样的方法,如果变量的值为“all”,那么表达式将匹配所有内容。

public void someFunction(String variable) {

    criteria.add(Expression.eq("product", variable))  

}

编辑:如果我有2个选择字段,包括源语言和目标语言和列出基于其包含的语言组合的条目的表,使用IF语句,它看起来像这样:( DynamicQuery是Criteria的抽象)

private DynamicQuery addCriteria(DynamicQuery dq, String languageFrom, String languageTo){

    if (null != languageFrom && !languageFrom.isEmpty() && null != languageTo && !languageTo.isEmpty()){

        if(languageFrom.equals("All") && languageTo.equals("All")) {
            return dq;
        } else if (!languageFrom.equals("All") && !languageTo.equals("All")) {
            dq.add(PropertyFactoryUtil.forName("languageFrom").eq(languageFrom));
            dq.add(PropertyFactoryUtil.forName("languageTo").eq(languageTo));    
            return dq;
        } else if (languageFrom.equals("All") && !languageTo.equals("All")) {
            dq.add(PropertyFactoryUtil.forName("languageTo").eq(languageTo));   
            return dq;
        } else if (!languageFrom.equals("All") && languageTo.equals("All")) {
            dq.add(PropertyFactoryUtil.forName("languageFrom").eq(languageFrom)); 
            return dq;
        } 
    } 
}

令人作呕的是,考虑会有更多的领域,它会更加恶心......一个人只需要涵盖可能发生的所有组合......这就是为什么我想要像REGEX这样的东西,因为我会为变量赋予reqex“*”值,我会添加两行,如下所示

dq.add(PropertyFactoryUtil.forName("languageFrom").eq(languageFromVariable));
dq.add(PropertyFactoryUtil.forName("languageTo").eq(languageToVariable));   

1 个答案:

答案 0 :(得分:2)

if (null != variable && !variable.isEmpty()){
    criteria.add(Expression.eq("product", variable)) ;
}

如果您在选择时只需要它。您可能希望添加if语句,以便仅在需要时添加条件。

编辑1:

如果您要将其用于多个字段,则可以定义方法。即使你可以在这里定义不同的标准。简单的维护(所有人都使用并且中心化),代码重用(在一点上改变对所有人都有效)

addCriteria(Criteria criteria, String name, String value){

 //you wanna handle special cases like null == name as well accordingly

    if (null != value && !value.isEmpty() && null != name && !name.isEmpty()){
        criteria.add(Expression.eq(name, value)) ;
    }
}