我正在使用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; }
根据Query.uniqueResults的文档:
用于返回与查询匹配的单个实例的便捷方法;如果查询没有返回结果,则返回null。
之所以不起作用,是因为您返回的不是UserBean我假设的String数组映射到UserLogin。
UserBean
UserLogin
尝试这样做:
(String[])query.uniqueResult();
或更改查询以获取对象:
Query query = session.createQuery("select u from " + "UserBean u where u.email = :user_email and " + "u.password = :user_password");
那应该让您开始。