日期:2014-05-19  浏览次数:20725 次

javaWeb->hql->in这个怎么做才是对的呀
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)


------解决方案--------------------
当前,类型也应该正确。看样子in里面应该是数字类型,而不是你的EnumType类.
------解决方案--------------------
探讨

现在的想法是能不能在DAO中,根据传入的参数类型进行自动转换,当然通过多个?,名是拼接串是可以做到的,但是会比较麻烦,也不能达到通用的效果。