Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法强制转换java.lang.Object_Java_Hibernate_Hql - Fatal编程技术网

无法强制转换java.lang.Object

无法强制转换java.lang.Object,java,hibernate,hql,Java,Hibernate,Hql,我正在尝试获取自定义问题中消息的所有用户投票: List<Vote> list = sessionFactory.getCurrentSession() .createQuery("from Vote as v left join v.message as m " + "where m.question=:question and v.user=:user and v.voteType=:voteType") .setP

我正在尝试获取自定义问题中消息的所有用户投票:

List<Vote> list = sessionFactory.getCurrentSession()
        .createQuery("from Vote as v left join v.message as m " +
                "where m.question=:question and v.user=:user and v.voteType=:voteType")
        .setParameter("question", question)
        .setParameter("user", user)
        .setParameter("voteType", VoteType.MESSAGE)
        .list();
System.out.println(list.get(0).getMessage().getNumber());

你做错了。Hibernate根据请求返回查询中的所有对象。但您需要使用
投票
对象,该对象位于索引0处

List<Object[]> list = sessionFactory.getCurrentSession()
        .createQuery("from Vote as v left join v.message as m " +
                "where m.question=:question and v.user=:user and v.voteType=:voteType")
        .setParameter("question", question)
        .setParameter("user", user)
        .setParameter("voteType", VoteType.MESSAGE)
        .list();
System.out.println(list.get(0)[0].getMessage().getNumber());
List List=sessionFactory.getCurrentSession()
.createQuery(“从投票为v左加入为m消息”+
“其中m.question=:question和v.user=:user和v.voteType=:voteType”)
.setParameter(“问题”,问题)
.setParameter(“用户”,用户)
.setParameter(“voteType”,voteType.MESSAGE)
.list();
System.out.println(list.get(0)[0].getMessage().getNumber());

试着这样做:

List<Object> list = sessionFactory.getCurrentSession()
            .createQuery("from Vote as v left join v.message as m " +
                    "where m.question=:question and v.user=:user and v.voteType=:voteType")
            .setParameter("question", question)
            .setParameter("user", user)
            .setParameter("voteType", VoteType.MESSAGE)
            .list();
    System.out.println(((Vote) list.get(0)).getMessage().getNumber())
List List=sessionFactory.getCurrentSession()
.createQuery(“从投票为v左加入为m消息”+
“其中m.question=:question和v.user=:user和v.voteType=:voteType”)
.setParameter(“问题”,问题)
.setParameter(“用户”,用户)
.setParameter(“voteType”,voteType.MESSAGE)
.list();
System.out.println(((投票)list.get(0)).getMessage().getNumber())

)

你能用调试器检查一下
list
是否真的包含
Vote
对象吗?OP就是这么做的,只是隐式的。它将以同样的错误失败。OP,至少找出索引1中的对象是有趣的。很明显,您的查询每行只要求一项,因此我猜测您尚未发布正在执行的真正查询。@MarkoTopolnik可能是一个包含
v.message
的字符串。如果OP只想在列表中获得投票对象,那么他应该使用
选择v from Vote as v left join…
。@ErwinBolwidt是的,这是我能想到的唯一解释,如果它是正确的,那么你的建议就是OP应该做什么而不是这个解决方法。然而,连接语义是否会导致一个急切加载的
消息
字段?Quote:
关联对象也不会直接在查询结果中返回。相反,它们可以通过父对象访问。
但这适用于获取连接,因此这可能是关键区别。Hibernate的文档通常对这些语义相当模糊,通常需要反复尝试才能猜出它们。
List<Object> list = sessionFactory.getCurrentSession()
            .createQuery("from Vote as v left join v.message as m " +
                    "where m.question=:question and v.user=:user and v.voteType=:voteType")
            .setParameter("question", question)
            .setParameter("user", user)
            .setParameter("voteType", VoteType.MESSAGE)
            .list();
    System.out.println(((Vote) list.get(0)).getMessage().getNumber())