关注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; } 

根据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"); 

这应该让你开始。

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

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

这将完全无需担心这个问题。