繁体   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