2017-08-02 75 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

相关问题