我想从一张表中随机读取N条信息出来,并且将这N条数据的ID封装成String放到另一张表去。可是在循环封装ID的时候就报错,以至于自己不能解决了。报错信息为“java.lang.ClassCastException: [Ljava.lang.Object;”,小弟十分感谢,谢谢啦!
以下是我的具体代码:
这个是DaoImple的代码
[code="java"]
public List randWare(final Integer count) throws Exception{
return (List<Ware>) this.getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
String sql = "select * from ware order by rand() limit "+count+"";
Query query = session.createSQLQuery(sql);
return query.list();
}
});
}
[/code]
这个是ServiceImpl的代码:
[code="java"]
public String randWare(Integer count) throws Exception{
List<Ware> list = wareDao.randWare(count);
StringBuffer sb = new StringBuffer();
for(Ware ware : list){
sb.append(",");
sb.append(ware.getId());
}
System.out.println("-------sb------"+sb);
return sb.substring(1);
}
[/code]
[b]
改为这样试试:(实体类的名称要改为全名称,即带有package名的)[/b]
[code="java"]
String sql = "select * from ware order by rand() limit "+count+"";
Query query = session.createSQLQuery(sql).addEntity(Ware.class);
[/code]
[code="java"]public List randWare(final Integer count) throws Exception{
return this.getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
String sql = "select * from ware order by rand() limit "+count+"";
Query query = session.createSQLQuery(sql);
return query.list();
}
}); [/code]
[code="java"]public String randWare(Integer count) throws Exception{
List list = wareDao.randWare(count);
StringBuffer sb = new StringBuffer();
Ware ware = null;
for(Ojbect obj: list){
ware = (Ware)ojb;
sb.append(",");
sb.append(ware.getId());
}
System.out.println("-------sb------"+sb);
return sb.substring(1); [/code]
先试试看吧。
[color=red][b]错误在这里:[/b][/color]
[code="java"]String sql = "select * from ware order by rand() limit "+count+"";
Query query = session.createSQLQuery(sql);[/code]
[color=blue]
[b]你采用的是 原生的SQL查询,返回的是数组,不是封装好的Bean对象
[/b][/color]
[b]你可以将上述的查询,改为HPQL的方式。。。[/b]