StringBuilder hql = new StringBuilder("from Trade where ")
.append("shop = ? ")
.append("and workStatus in (?) ");
List<Object> paramsList = new ArrayList<Object>();
paramsList.add(trade.getShop());
List<WorkStatus> workStatusList = new ArrayList<WorkStatus>();
workStatusList.add(WorkStatus.CLIENT);
workStatusList.add(WorkStatus.FINANCIAL);
paramsList.add(workStatusList);//paramsList.add(workStatusList);后面这个也不行 tradeDao.findByHql(hql.toString(), paramsList.toArray());
报的异常都是in后面的这个?的类型转换错误。
java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.lang.Enum
用注释掉的会报
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to java.lang.Enum
at org.hibernate.type.EnumType.nullSafeSet(EnumType.java:148)
.append("shop = ? ")
.append("and workStatus in (?) ");
List<Object> paramsList = new ArrayList<Object>();
paramsList.add(trade.getShop());
List<WorkStatus> workStatusList = new ArrayList<WorkStatus>();
workStatusList.add(WorkStatus.CLIENT);
workStatusList.add(WorkStatus.FINANCIAL);
paramsList.add(workStatusList);//paramsList.add(workStatusList);后面这个也不行 tradeDao.findByHql(hql.toString(), paramsList.toArray());
报的异常都是in后面的这个?的类型转换错误。
java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.lang.Enum
用注释掉的会报
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to java.lang.Enum
at org.hibernate.type.EnumType.nullSafeSet(EnumType.java:148)
解决方案 »
- SSH ,org.objectweb.asm.ClassVisitor.visit异常
- 工程名路径问题,急~~~~~~~在线等
- 资源文件问题,急!
- 参与者有分,关于Struts2.0.11.1 + spring2.5.4 + Hibernate3.2.6整合问题
- STRUTS2 循环中自变量的问题
- Spring中的XML
- 求在上海的JAVA高手做兼职!
- 关于javamail的问题
- 请问能不能在java程序里打开sqlserver服务器
- Eclipse+jboss3.2.1请问哪里可以找到一步步做EJB的练习呢?
- 严重!!!!!!!急 !!!!!下面是他所以报错的地方,!!求大神帮忙下
- 请问使用JdbcTemplate新增数据如何获得改数据的自增id?
query.setParameter(position, params[position]);
}
就是画红线的部分,解析有错,哪位大虾有什么解决方案没有呀。
你分开写,
StringBuilder hql = new StringBuilder("from Trade where ")
.append("shop = ? ")
.append("and workStatus in ( "); for(int i = 0;i < paramsList.size();i++ ){
if(i > 0)
hql.append(",");
hql/append("'"+ paramsList.get(i).getFieldName +"'");
}
hql.append(")");
可以,你這樣寫的不對,不能直接傳數組。你在?中傳入一個字符串形式 "a,b,c,d,e"這樣的試試
for (int i=0; i<workStatusList.size(); i++){
if (i>0)
hql.append(", ");
hql.append("?");
paramsList.
add(workStatusList.get(i).toString());
}
hql.append(" )");
.append("and workStatus in (:workStatus) ");List<Object> paramsList = new ArrayList<Object>();
//workStatus的值域
List<WorkStatus> workStatusList = new ArrayList<WorkStatus>();
workStatusList.add(WorkStatus.CLIENT);
workStatusList.add(WorkStatus.FINANCIAL);paramsList.add(workStatusList);//paramsList.add(workStatusList.toArray());后面这个也不行tradeDao.findByHql(hql.toString(), paramsList.toArray());Dao中方法的参数为findByHql(final String hql,final Object ...params);
如果dao中写成query.setParameter("workStatus", params[0]);这样子是对的,
因为query.setParameter(String,Conllection)方法,
而没有query.setParameter(int,Conllection),只有query.setParameter(int,Object)方法。
还没想到什么好的方法,只有多写拼几个问号了。