gpt4 book ai didi

mysql - Hibernate 选择空对象

转载 作者:行者123 更新时间:2023-11-30 00:17:15 26 4
gpt4 key购买 nike

我有一个问题,因为我试图访问一个空对象,不知道如何解决它,如果没有 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com