gpt4 book ai didi

java - 像数字字段上的 Hibernate 标准

转载 作者:行者123 更新时间:2023-12-05 07:57:57 27 4
gpt4 key购买 nike

在数字字段的条件上添加 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;
}

完整的堆栈跟踪:

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("%"),

关于java - 像数字字段上的 Hibernate 标准,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26035814/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com