获取错误java.lang.ClassCastException:java.lang.String无法强制转换为[Ljava.lang.Object;

时间:2017-01-21 11:21:24

标签: java spring hibernate classcastexception

我有这个函数,我试图使用sql查询从表中提取名称。

@Override
    @Transactional
    public String getEmpNameFromId(long Id) {
        final Session session = sessionFactory.openSession();
        String name = "";
        SQLQuery query = session.createSQLQuery("SELECT name from employee where id=" + Id);
        List<Object[]> list = (List<Object[]>)query.list();//Object[] objs = (Object[])query.uniqueResult()
        for (Iterator<Object[]> iterator = list.iterator(); iterator.hasNext();) {
            Object[] e = iterator.next();
            name = (String)e[0];//case object type to another by youself...
        }
        return name;
    }

在我的数据库对象中,我将此函数称为:

String empName = empDao.getEmpNameFromId(data.getId());
logger.info("name"+empName);

具有getEmpNameFromId函数的接口如下:

public interface empDao {
    String getEmpNameFromId(long Id);
}

我得到例外:

java.lang.ClassCastException: java.lang.String cannot be cast to [Ljava.lang.Object;

需要一些帮助。

提前致谢:)

1 个答案:

答案 0 :(得分:1)

如果在查询中使用一列,则list的元素的结果类型将作为单个Object返回。否则,如果使用了许多列,则每行的结果类型为Object[]

来自文档:

public List list() throws HibernateException;
     

将查询结果作为List返回。如果查询包含   前面有多个结果,结果是在一个实例中返回的   Object[]

更改

List<Object[]> list = (List<Object[]>)query.list();

List list = query.list();

然后,您的结果应该只返回String元素的List类型的一行。

return (String)list.get(0);