2017-01-21 5 views
1

SQL 쿼리를 사용하여 테이블에서 이름을 추출하려고하는이 함수가 있습니다.오류가 발생합니다. java.lang.ClassCastException : java.lang.String을 [Ljava.lang.Object;

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

인터페이스 기능 getEmpNameFromId을 필요로한다 : 나의 데이터베이스 오브젝트에서

@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; 
    } 

나는이 함수를 호출하고

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

내가 같이 예외를 얻고있다 :

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

도움이 필요해. 쿼리에서 하나의 열을 사용하는 경우 사전 :

+0

다음을 대신 사용해보십시오 :'name = e [0] .toString(); ' – DevilsHnd

+0

예외가 발생한 곳을 다시 확인하십시오. 그것은'String'의 인스턴스를'Object []'로 불법적으로 캐스팅 한 것에 대해 불평하고 당신이 당신의 코멘트를 추가 한 라인에서는 일어나지 않습니다. –

답변

1

에서

덕분에,리스트의 요소의 결과 유형은 단일 Object로 반환됩니다. 그렇지 않으면 많은 열이 사용되는 경우 결과 유형은 행 당 Object[]입니다. 워드 프로세서

하십시오 List로 쿼리 결과

public List list() throws HibernateException; 

돌아갑니다. 쿼리에 여러 행 결과가 포함 된 경우 결과는 Object[]의 인스턴스로 반환됩니다.

변경

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

List list = query.list(); 

에 그런 다음 결과는 List의 요소의 String 유형 단 하나의 행을 반환해야합니다.

return (String)list.get(0);