Hibernate不像(例如百分比%
號)逃避特殊字符。但也有說明如何解決呢(轉義):
一般來說,我們可以實現我們自己的EscapedILikeExpression
(取自第一鏈接)
class EscapedILikeExpression extends IlikeExpression {
private static final String HIBERNATE_ESCAPE_CHAR = "\\";
public EscapedILikeExpression(String propertyName, Object value) {
super(propertyName, value);
}
public EscapedILikeExpression(String propertyName, String value, MatchMode matchMode) {
super(propertyName, replaceAll(value), matchMode);
}
private static String replaceAll(String value) {
return value
.replace("\\", HIBERNATE_ESCAPE_CHAR + "\\")
.replace("_", HIBERNATE_ESCAPE_CHAR + "_")
.replace("%", HIBERNATE_ESCAPE_CHAR + "%");
}
}
和
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));
那麼它是如何獲取的記錄即使通過%符號%。它應該具有空值權限返回? – Karthick
問題是,如果我們想要像%這樣的符號用於過濾...我們必須逃避它們。使用SQL Server,我將它們從%更改爲'[%]'...然後只包含將返回的值。即如果我們在SQL服務器上使用[%] sym [%],只有這些記錄會被找到,因爲它會被轉換成SQL語句'WHERE x like'%[%] sym [%]%'' –
Thanks Radim科勒,現在我明白了。 – Karthick