簡體   English   中英

像數字字段一樣的休眠條件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM