private ILogin results;
public ILogin authenticate(Login login) {
System.out.println(login);
System.out.println(login.getEmail());
String query = "SELECT email, id FROM Login WHERE email='"
+ login.getEmail() + "' AND password='" + login.getPassword() + "'";
results = getHibernateTemplate().find(query);
System.out.println(results);
return results;
}
如何更改results = getHibernateTemplate().find(query);
我收到此行中的错误。但我希望ILogin类型不是List类型。我如何在这里进行类型转换。
答案 0 :(得分:2)
问题不在于类型转换本身 - 您执行的查询可能会返回多个结果,但您只需要单个结果。
您可能想要检查结果列表中是否只有一个值(0表示未找到登录;超过1可能意味着您的数据中存在问题),然后返回第一个值(return (ILogin) list.get(0);
)。
作为一个稍微独立的问题,您不应该直接在查询中包含数据,例如IMO。使用查询参数,这在Hibernate中非常简单:
String query = "SELECT email, id FROM Login WHERE email=? AND password=?";
Object[] parameters = { login.getEmail(), login.getPassword() };
List results = getHibernateTemplate().find(query, parameters);
if (results.size() != 1) {
// Probably throw an exception
}
// I'm assuming your mapping has been set up appropriately such that
// the returned value will *be* an `ILogin`.
return (ILogin) results.get(0);
最后,你几乎肯定不希望results
成为一个实例变量 - 它应该是一个局部变量,如上面的例子所示。
答案 1 :(得分:1)
虚拟方式是使用getHibernateTemplate().find(query).get(0);
,但如果没有找到这样的登录,这将导致异常。
正如乔恩所说,检查你的查询是否空虚。
答案 2 :(得分:1)
我假设春天:)。
List resultsList = getHibernateTemplate().find(query);
if ( resultsList.size() == 1 ) {
results = (ILogin)resultsList.get(0);
} else {
// error no entity or mutiple entities
}
return results.
这应该有用。