一尘不染

下调休眠查询的问题

hibernate

我正在使用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;
}

阅读 285

收藏
2020-06-20

共1个答案

一尘不染

根据Query.uniqueResults的文档:

用于返回与查询匹配的单个实例的便捷方法;如果查询没有返回结果,则返回null。

之所以不起作用,是因为您返回的不是UserBean我假设的String数组映射到UserLogin

尝试这样做:

(String[])query.uniqueResult();

或更改查询以获取对象:

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

那应该让您开始。

2020-06-20