2017-08-02 77 views
1

我正在開發一個Spring Hibernate的Web應用程序。從列表中獲取列值時遇到錯誤。但是這個錯誤不斷出現。請幫我放。提前致謝。java.lang.ClassCastException:java.lang.String不能轉換爲[Ljava.lang.Object;當試圖通過休眠獲得colum值到列表

@Repository 
@Transactional 
public class GetProjectsDaoImpl implements GetProjectsDao { 

    @Autowired 
    private HibernateUtilImpl hibernateutilimpl; 

    public List<Projects> getProjects() { 

     String sql = "select project_id from project"; 

     List<Object[]> projectObjects = hibernateutilimpl.fetchAll(sql); 

     List<Projects> projectsList = new ArrayList<Projects>(); 

     for(Object[] projectObject: projectObjects) { 
      Projects project = new Projects(); 
      String id = (String) projectObject[0]; 

      project.setProjectId(id); 

      projectsList.add(project); 
     } 
     return projectsList; 
    } 

} 

@Repository 
public class HibernateUtilImpl implements HibernateUtil { 

    @Autowired 
    private SessionFactory sessionFactory; 

    public <T> Serializable create(final T entity) { 

     return sessionFactory.getCurrentSession().save(entity); 
    } 

    public <T> T update(final T entity) { 
     sessionFactory.getCurrentSession().update(entity); 
     return entity; 
    } 

    public <T> void delete(final T entity) { 

     sessionFactory.getCurrentSession().delete(entity); 
    } 

    @SuppressWarnings("rawtypes") 
    public <T> List<T> fetchAll(String query) { 
     return sessionFactory.getCurrentSession().createNativeQuery(query).list(); 
    } 

} 
+1

可能重複的[java classcast exception](https://stackoverflow.com/questions/2757034/java-classcast-exception) –

+0

你試過在你的方法getProjects()中改變Object []爲String嗎? –

+0

'hibernateutilimpl.fetchAll(sql)'返回一個列表'在你的情況下 – Nathan

回答

1

我有以下建議。第一個變化:

List<Object[]> projectObjects = hibernateutilimpl.fetchAll(sql); 

到:

List<Object> projectObjects = hibernateutilimpl.fetchAll(sql); 

下,變化:

for(Object[] projectObject: projectObjects) { 
    String id = (String) projectObject[0]; 

for(Object projectObject: projectObjects) { 
    String id = (String) projectObject; 

,都需要上面的變化,因爲你只選擇單個柱。僅在選擇多個列時才使用Object[]

+0

謝謝。這適用於單列。但是如果我想選擇幾列呢? – jsb9009

+0

嗨,對於多列你寫的原代碼應該工作,比方說你有project_id和project_name,改變你的sql獲取2列,以獲得第二列的值do String project_name =(String)projectObject [1]; – deepakl

+0

除上述以外,如果您正在選擇所有列,那麼您可以執行列表 projectObjects如果項目具有與PROJECT表中的列相對應的所有字段... – deepakl

相關問題