Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate标准,在某些情况下与所有内容匹配_Java_Hibernate_Criteria - Fatal编程技术网

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

Java Hibernate标准,在某些情况下与所有内容匹配,java,hibernate,criteria,Java,Hibernate,Criteria,有可能做像这样的事情吗 criteria.add(Expression.eq("product", " * ")) 让它匹配所有东西 如果您得到一个可以有许多值的变量和一个与所有值匹配的特殊值“all”,这将非常方便。因此,您可以调用这样的方法,如果变量的值为“all”,那么表达式将匹配所有内容 public void someFunction(String variable) { criteria.add(Expression.eq("product", variable))

有可能做像这样的事情吗

criteria.add(Expression.eq("product", " * "))  
让它匹配所有东西

如果您得到一个可以有许多值的变量和一个与所有值匹配的特殊值“all”,这将非常方便。因此,您可以调用这样的方法,如果变量的值为“all”,那么表达式将匹配所有内容

public void someFunction(String variable) {

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

}
编辑:如果我有两个带有源语言和目标语言的select字段,以及一个根据其包含的语言组合列出条目的表,如果有If语句,则看起来是这样的:(DynamicQuery是标准的抽象)

这很恶心,想想还有一块田地,它会更恶心……一个人必须简单地覆盖所有可能发生的组合…这就是为什么我想要像REGEX这样的东西,因为我会给变量赋值reqex“*”值,然后我会像这样加两行

dq.add(PropertyFactoryUtil.forName("languageFrom").eq(languageFromVariable));
dq.add(PropertyFactoryUtil.forName("languageTo").eq(languageToVariable));   
如果您仅在选择它时才需要它。您可能需要添加if语句,以便仅在需要时添加条件

编辑1:

如果要将方法用于多个字段,则可以定义该方法。甚至你可以在这里定义不同的标准。易于维护(如所有人使用的和中心化的),代码重用(在某一点上的更改将对所有人有效)


如果你想要所有的东西,为什么要添加条件?@fatih,只有在某些情况下……想象一下,你在表单中有一个select字段,并且有[全部、红色、蓝色、绿色、黄色]。。。根据用户的选择,它会列出一些。。。我是hibernate新手,在Documentation中找不到替代方法如果没有这个,我必须创建一个条件:if(variable==“all”){创建与if完全不同的条件}if语句是正确的方法。为什么不想添加if-stmt呢?在SQL中没有任何东西可以与所有内容相等,因此在Hibernate中也没有。您可以使用类似于
product==variable | | variable==“”
的奇怪功能,但这可能会导致执行速度变慢。有条件地排除条件可能是一条路。这正是我想要避免的。。。因为如果它是一个更复杂的情况,那么这个,我正在寻找的特性会使事物更加透明和可维护……考虑到你有3个HTML表单的选择字段,并且它们都有“ALL”选项,那么你必须用IF STMT来处理所有的组合。[object.field1=全部,object.field2=蓝色,object.field3=红色]这是一个来自9@lisak请参见上面的编辑;对于几个类似的字段,您可以使用中心化方法来执行添加条件的逻辑。为什么不调用上面的addCriteria方法两次呢?对于这种情况,您需要1 if/else。不要将所有可能的逻辑路径合并到一个方法中。addCriteria(criteria,“fromLanguage”,fromLanguageValue)添加标准(标准“toLanguage”,toLanguageValue);
dq.add(PropertyFactoryUtil.forName("languageFrom").eq(languageFromVariable));
dq.add(PropertyFactoryUtil.forName("languageTo").eq(languageToVariable));   
if (null != variable && !variable.isEmpty()){
    criteria.add(Expression.eq("product", variable)) ;
}
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)) ;
    }
}