【问题标题】:java.lang.ClassCastException: org.hibernate.internal.SQLQueryImpl cannot be cast to java.util.List how to fixjava.lang.ClassCastException:org.hibernate.internal.SQLQueryImpl 无法转换为 java.util.List 如何修复
【发布时间】:2013-08-11 11:47:46
【问题描述】:
 List<Candidate> candidates = (List<Candidate>) session.createSQLQuery("select candidate.* from candidate inner join candidate_skill on candidate.id = candidate_skill.candidate_id inner join skill on candidate_skill.skill_id = skill.id where skill.id = 1");       

我明白了:

 java.lang.ClassCastException: org.hibernate.internal.SQLQueryImpl cannot be cast to java.util.List

查询正确。如何解决?

【问题讨论】:

    标签: java sql hibernate exception


    【解决方案1】:

    查询未返回任何内容,您正在尝试将其分配给 List

    你应该这样做

     List<Candidate> candidates = (List<Candidate>) session.createSQLQuery
                   ("select candidate.* from candidate inner join 
                        candidate_skill on candidate.id = candidate_skill.
                            candidate_id inner join skill on 
                      candidate_skill.skill_id = skill.id 
                                              where skill.id = 1").list();
    

    A simple native query example

    【讨论】:

    • 我认为,您可以帮助使用 HQL 编写此查询。我想获取 List
    • 为什么要查询,我想建议标准..请查看标准。
    【解决方案2】:

    您在查询结束时忘记了.list()

    应该是这样的

    ................skill.id where skill.id = 1").list();
    

    更多信息请参考hibernate documentation

    【讨论】:

    • 你能帮忙得到真正的 List,现在我得到一个对象数组,它由字段数组组成
    • @user2645679:您需要循环 List,获取 Object[] 并根据索引进行查找,索引 0 表示第一列数据,索引 1 表示第二列等,填充到候选对象。
    • 没有更好的解决方案吗?
    • @user2645679:我不知道您何时使用本机 SQL。
    • HQL 对这种情况有帮助吗?
    猜你喜欢
    • 1970-01-01
    • 2021-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多