[英]Hibernate Criteria like on numeric field
在數字字段的條件上添加LIKE時遇到錯誤
碼:
criteria.add(Restrictions.like("id", value, MatchMode.ANYWHERE));
在控制台上輸出:
Hibernate: select this_.id as id0_0_, this_.firstName as firstName0_0_ from Employee this_ where this_.id like ?
Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Long
注意:已經嘗試過sqlRestrictions
,這里我使用id字段,但是在我的方案中,用戶選擇搜索字段,因此很難為用戶選擇的字段獲取SQL字段。 使用基於注釋的hibernate()參見以下函數。
public static Criteria addSearch(Criteria criteria, String field, String value){
criteria.add(Restrictions.like(field, value, MatchMode.ANYWHERE));
return criteria;
}
完整的Stacktrace:
Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Long
at org.hibernate.type.descriptor.java.LongTypeDescriptor.unwrap(LongTypeDescriptor.java:36)
at org.hibernate.type.descriptor.sql.BigIntTypeDescriptor$1.doBind(BigIntTypeDescriptor.java:52)
at org.hibernate.type.descriptor.sql.BasicBinder.bind(BasicBinder.java:91)
at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:283)
at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:278)
at org.hibernate.loader.Loader.bindPositionalParameters(Loader.java:1873)
at org.hibernate.loader.Loader.bindParameterValues(Loader.java:1844)
at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1716)
at org.hibernate.loader.Loader.doQuery(Loader.java:801)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274)
at org.hibernate.loader.Loader.doList(Loader.java:2533)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2276)
at org.hibernate.loader.Loader.list(Loader.java:2271)
at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:119)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1716)
at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:347)
at exec.Main.main(Main.java:68)
從異常日志來看,這似乎是強制轉換問題。 您是否嘗試過String valueStr = String.valueOf(value);
(假設變量值為long類型)?
對於LIKE
操作,您將需要在字符串"%".concat(valueStr).concat("%")
添加'%'符號,
Restriction.like() is causing casting problem. You can use criteria to build a sqlRestriction for the same
criteria.add(Restrictions
.sqlRestriction("{alias}.id LIKE ('%value%')"));
這對我有用
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.