mysql - Hibernate 选择空对象

标签 mysql hibernate select indexoutofboundsexception

我有一个问题,因为我试图访问一个空对象,不知道如何解决它,如果没有 hibernate 会检查 ResulSet 对象。next 不是 0,但在这里使用 Hibernate,我正在尝试这样做这没有成功:

public User buscaHotel(int id){

    User user =null;
    SessionFactory sf = open();
    Session ss=sf.openSession();
    ss.beginTransaction();      
    Query query = ss.createQuery("from User_table where userId = :id ");
    query.setParameter("id", id);
    List<?> list = query.list();
    if (list != null){
        System.out.println("Not NULL");
    user = (User)list.get(0);
    ss.getTransaction().commit();
    ss.close();
    return user;
    }
    else {
    ss.getTransaction().commit();
    ss.close();
    return user;
    }
}

当我发送一个不在表中的 id 时,我收到错误数组索引越界,因为它进入了 if (list !=null)。 感谢您的帮助,非常感谢。

最佳答案

快速修复您的代码

在获取第一个元素之前,您需要检查列表是否为空。

更改此行:

user = (User)list.get(0);

对此:

if(list.size() > 0) user = (User)list.get(0);

更好的解决方案

当您希望只返回一条记录/实体时,可以使用Query#uniqueResult()。那么你就不必担心处理列表,如下所示:

User user = (User) query.uniqueResult();

请注意,如果实际上返回了多个记录,uniqueResult() 将引发异常。

但是,通过 id 获取单个实体的典型方法是使用 Session#get(Class, Serialized) (如果未找到则返回 null)或 Session#load(Class, Serialized)(如果未找到,则抛出异常)。这样,您根本不必编写查询。像这样:

User user = (User) session.get(User.class, id);

关于mysql - Hibernate 选择空对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23555131/

相关文章:

MySQL 连接查询(可能有两个内连接)

mysql - 无法在rails中创建新记录

sql - 在 SQL 中匹配相似的城市名称

javascript - 选择下拉列表不绑定(bind)值

php - 同步本地数据库和现场数据库

mysql - 如何在 mysqli_query 语句中使用全局变量

java - 如何从存储过程获取多个结果集到spring boot端

java - 使用SQL查询创建索引和在JPA中使用@Index创建索引的区别

java - Hibernate 一类映射到多个表

java - Selenium:选择间接兄弟元素