我更改了 Hibernate sql,遇到了问题。
我认为这是因为 ids
是字符串。
我该如何解决这个问题?
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
at org.hibernate.type.IntegerType.set(IntegerType.java:64)
at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:156)
at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:138)
at org.hibernate.param.PositionalParameterSpecification.bind(PositionalParameterSpecification.java:68)
at org.hibernate.loader.hql.QueryLoader.bindParameterValues(QueryLoader.java:567)
at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1612)
at org.hibernate.loader.Loader.doQuery(Loader.java:717)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:270)
at org.hibernate.loader.Loader.doList(Loader.java:2294)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2172)
at org.hibernate.loader.Loader.list(Loader.java:2167)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:448)...
这是我的代码:
public List getUser(int leader, List<Member> members) {
String ids = String.valueOf(leader);
if (GeneralUtil.hasValue(members)) {
for (Member member : members) {
ids += "," + member.getUserId(); //1,2,3,4
}
}
try {
// Old method works well:
// StringBuffer qryStr = new StringBuffer(
// "from User u where u.userId in (" + ids + ")");
// return this.getHibernateTemplate().find(qryStr.toString());
StringBuffer qryStr = new StringBuffer("from User u where u.userId in (?)");
return this.getHibernateTemplate().find(qryStr.toString(), new Object[] { ids });
} catch (DataAccessException e) {
e.printStackTrace();
}
return null;
}
最佳答案
整数
数组怎么样?
Integer[] ids = new Integer[members.size()+1];
ids[0] = leader;
for (int i = 0; i < members.size(); i++) {
ids[i+1] = member.getUserId();
}
关于java - Hibernate sql错误:java. lang.String无法转换为java.lang.Integer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31097785/