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