java - 类型不匹配 : cannot convert from List to ILogin

标签 java hibernate

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/

相关文章:

hibernate - 如何在 hibernate 标准投影中进行划分(column1/column2)

java - 如何从原始消息字符串中选取 json 对象?

java - md5DigestAsHex 是如何工作的?

java - 重新初始化执行器时的最佳实践

java - 如何将 StyledDocument 从 textPane 保存到 .doc 文件中?

java - 判断ResourceRequest是否是AJAX请求

java - Grails/GORM withCriteria 搜索 toString()

java - getHibernateTemplate().flush() 和 getSession().flush() 有什么区别

java - 带有 Predicate 的 Spring Data JPA 方法 findAll() - QueryDslPredicateExecutor

java - Hibernate:如何将R(选择器,键,*)中的不同选择器映射到不同字段?