Java 休眠条件接受%%value
我正在使用下面的Hibernate代码过滤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
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。现在我找到了它。太棒了!真正地享受美妙的冬眠吧,先生;)设置了db2org.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));