我必须Restrictions.like("sequenceNo", "%" + Integer.valueOf(sequenceNo.trim()) + "%")
。
字段sequenceNo
是整数类型,但sequenceNo
参数值是字符串。我的问题是我得到了例外java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
。出于某些原因,我真的必须使我的param成为字符串数据类型。当我在SQL中尝试使用LIKE一个整数时,它可以工作。
请帮忙。感谢。
答案 0 :(得分:7)
您不能为此目的添加Criteria的属性限制,因为在获取期间,指定的属性值将根据Entity类中指定的“字段类型”进行转换。
但是,解决方案是使用SQLRestriction of criteria,通过传递。我已经测试过了,这很有效。
yourDetachedCriteriaObj.add(Restrictions.sqlRestriction(" sequenceNo LIKE '%"+yourSequenceNumToSearch+"%' "));
要获取列表,您可以在下面进行操作
List ls = yourDetachedCriteriaObj.getExecutableCriteria(yourSession).list();
// iterate over list or do whatever.
答案 1 :(得分:1)
我感到很惭愧,但我确实跟进了postgres的解决方法
crit.add(Restrictions.sqlRestriction(entry.getKey()+"::text like '%"+entry.getValue().replace("'", "''")+"%'"));
答案 2 :(得分:0)
我的postgres修改
cr34.add(Restrictions.sqlRestriction(cr34.getAlias()+"_.field::text like '%"+ fieldVal+"%'"));
答案 3 :(得分:0)
表示整数搜索参数
criteria = session.createCriteria(demo.class).add(Restrictions.sqlRestriction(" sequenceNo LIKE'%" + searchParameter +"%'" ;));
试试这个......
答案 4 :(得分:0)
yourDetachedCriteriaObj.add(Restrictions.sqlRestriction(" sequenceNo LIKE '%"+yourSequenceNumToSearch+"%' "));
返回错误以禁用类型转换:
运算符不退出:整数~~未知 提示:没有运算符匹配给定的名称和参数tyeps。您可能需要添加显式类型转换。
所以,我们可以使用这段代码:
yourDetachedCriteriaObj.add(Restrictions.sqlRestriction(" sequenceNo ::text LIKE '%"+yourSequenceNumToSearch+"%' "));