Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.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 休眠条件接受%%value_Java_Hibernate_Jakarta Ee_Orm_Hibernate Criteria - Fatal编程技术网

Java 休眠条件接受%%value

Java 休眠条件接受%%value,java,hibernate,jakarta-ee,orm,hibernate-criteria,Java,Hibernate,Jakarta Ee,Orm,Hibernate Criteria,我正在使用下面的Hibernate代码过滤workFlowName crt.add(Restrictions.like("workFlowName", workFlow, MatchMode.ANYWHERE)); // crt is the criteria 问题是当我从web(文本框)将值传递给工作流时(文本框)。它正确地获取了值(如果获取10条记录,我将在文本框中传递sym。如果我再次传递相同的值,如%sym%,它将获取相同的记录) 当标准将%%视为参数时,它是否会忽略?Hibernat

我正在使用下面的Hibernate代码过滤
workFlowName

crt.add(Restrictions.like("workFlowName", workFlow, MatchMode.ANYWHERE));
// crt is the criteria
问题是当我从web(文本框)将值传递给工作流时(文本框)。它正确地获取了值(如果获取10条记录,我将在文本框中传递
sym
。如果我再次传递相同的值,如
%sym%
,它将获取相同的记录)


当标准将
%%
视为参数时,它是否会忽略?

Hibernate不会在like中转义特殊字符(例如百分比
%%
符号)。但有关于如何解决它(逃避它)的描述:

一般来说,我们可以实现自己的
EscapedILikeExpression
(取自上面的第一个链接)

现在我们应该可以打电话了

crt.add(EscapedRestrictions.ilike("workFlowName", workFlow, MatchMode.ANYWHERE));

那么,即使通过%sym%,它如何获取记录呢?它应该返回空值,对吗?问题是,如果我们想让像%这样的符号用于过滤。。。我们必须逃离他们。使用SQL Server,我将它们从%更改为
[%]
。。。然后只返回包含该值的值。也就是说,如果我们将[%]sym[%]与SQL server一起使用,则只会找到具有这些的记录,因为它将转换为SQL语句
,其中x类似于“%[%]sym[%]%”
谢谢Radim Köhler。现在我找到了它。太棒了!真正地享受美妙的冬眠吧,先生;)设置了db2
org.hibernate.dial.DB2Dialect
,则无法在db2上工作
public class EscapedRestrictions {
    public static Criterion ilike(String propertyName, String value) {
        return new EscapedILikeExpression(propertyName, value);
    }

    public static Criterion ilike(String propertyName, String value, MatchMode matchMode) {
        return new EscapedILikeExpression(propertyName, value, matchMode);
    }
}
crt.add(EscapedRestrictions.ilike("workFlowName", workFlow, MatchMode.ANYWHERE));