Java 向下转换hibernate查询时出现的问题

Java 向下转换hibernate查询时出现的问题,java,hibernate,casting,Java,Hibernate,Casting,我正在处理使用hibernate向下转换查询的问题。我有两门课: -用户bean -用户登录 在第一个示例中,我拥有所有表字段的映射以及处理数据的所有方法。而第二个仅表示将存储在用户会话中的一些用户数据 在我的登录方法中的某一点上,我执行查询并得到1行(我已经检查了查询是否真的返回了一些结果)。关键是我不能将对象类型(即query.uniqueResult()类型)向下转换为UserLogin类型 有人知道哪一个可能是问题吗 非常感谢 这是登录方法: public UserLogin login

我正在处理使用hibernate向下转换查询的问题。我有两门课: -用户bean -用户登录

在第一个示例中,我拥有所有表字段的映射以及处理数据的所有方法。而第二个仅表示将存储在用户会话中的一些用户数据

在我的登录方法中的某一点上,我执行查询并得到1行(我已经检查了查询是否真的返回了一些结果)。关键是我不能将对象类型(即query.uniqueResult()类型)向下转换为UserLogin类型

有人知道哪一个可能是问题吗

非常感谢

这是登录方法:

public UserLogin login(String email, String password){

    Session session = iniHibernate();
    UserLogin userLogin = null;

    try{
        session.beginTransaction();
        Query query = session.createQuery("select email, name from "
                + "UserBean u where u.email = :user_email and "
                + "u.password = :user_password");
        query.setString("user_email", email);
        query.setString("user_password",password);            

        userLogin = (UserLogin) query.uniqueResult();

        session.getTransaction().commit();
    }catch (Exception e){
        System.out.println(e);
    }
    return userLogin;
}

根据以下文件:

返回单个 与查询匹配的实例,或 如果查询未返回任何结果,则为null

它不起作用的原因是,您返回的字符串数组不是
UserBean
,我假设它映射到
UserLogin

尝试这样做:

(String[])query.uniqueResult();
或更改查询以获取对象:

Query query = session.createQuery("select u from "
            + "UserBean u where u.email = :user_email and "
            + "u.password = :user_password");

这应该可以让您开始了。

我通过将实体类型添加到查询对象中来解决它,如下所示:

Query query = session.createQuery(queryString).addEntity(Foo.class);
Foo foo = query.uniqueResult();

这将非常有效,无需担心此问题。

如果您没有实体,可以使用

Query query = session.createQuery(queryString);
Object[] obj= query.uniqueResult();

这对我很有效。

非常感谢你,穆罕默德。我实现了您的建议(String[]queryResult=(String[])query.uniqueResult();),但我仍然获得以下错误(我将查询仅保留为名称和电子邮件字段):-INFO:java.lang.ClassCastException:[Ljava.lang.Object;如果将其更改为Object[],则无法转换为[Ljava.lang.String]它的类型是什么?Mohamed在最后我将查询更改为UserBean对象(如您所建议的),然后我从UserBean数据创建了一个userLogin对象。非常感谢。@MohamedMansour数组的各个“组件类型”都是字符串,但数组本身始终是一个对象[]。另一个保持标量SQL结果的选项(较小的JDBC结果集大小)在内存中处理OO rep时,Hibernate称之为“动态实例化查询”
从UserBean u中选择新的UsernameandMailBean(u.email,u.name)…
。在这里,您将返回列表,而不是列表。UsernameandMailBean是任何类(不必映射);必须具有匹配的构造函数(此处为String,String)。