我正在处理使用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;
}
答案 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();
这对我很有效。