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 类型而不是列表类型。我如何在这里进行类型转换。
最佳答案
问题不在于类型转换本身 - 问题在于您执行了一个可能返回多个结果的查询,但您只想要一个单个结果。
您可能想要检查结果列表是否只有一个值(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
成为实例变量 - 它可能应该是局部变量,如我上面的示例所示。
关于java - 类型不匹配 : cannot convert from List to ILogin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4646207/