向下转换hibernate查询的问题

时间:2011-03-22 00:04:53

标签: java hibernate casting

我正在处理使用hibernate向下转换query.uniqueResult()的问题。我有2个班: - UserBean - UserLogin

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

在我的登录方法的某一点,我执行查询,我得到1行(我已经检查过,如果查询确实返回了一些结果)。关键是我不能将Object类型(即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;
}

3 个答案:

答案 0 :(得分:3)

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

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

完全无需担心此问题。

答案 1 :(得分:2)

根据Query.uniqueResults的文件:

  

返回单一的便捷方法   与查询匹配的实例,或   如果查询未返回任何结果,则返回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");

这应该让你开始。

答案 2 :(得分:0)

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

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

这对我很有效。