Hibernate 5.2 版本 -> 很多查询方法弃用了吗?

2022-09-03 04:49:43

我是Hibernate的新手。

我正在尝试获取所有管理员的名字和姓氏的列表。

在我的以下代码中有两个警告。我已经尝试在网上搜索很多。

1) 查询是原始类型。对泛型类型 Query 的引用应参数化。

2) 类型 Query 中的方法 list() 已弃用。

public List<Object> loadAllAdmins() {
                List<Object> allAdmins = new ArrayList<Object>();
                try {
                        HibernateUtil.beginTransaction();

                        Query q = currentSession.createQuery("SELECT admin.firstName, admin.lastName from AdminBean admin");

                        allAdmins= q.list();

                        HibernateUtil.commitTransaction();
                } catch (HibernateException ex) {
                        System.out.println("List<AdminBean> loadAllPersons: HibernateException");
                }
                return allAdmins;
        }

但是我在整个网络中都看到了这样的示例代码。我应该如何解决这两个问题?

更新

我只是尝试按照建议使用标准。它还说list()方法对于标准是不推荐使用的...似乎很多方法对于Query和Criteriation都是弃用的,包括uniqueResult()和其他方法......任何建议我应该如何替换它们?


答案 1
public List<Admin> getAdmins() {
    List<Admin> AdminList = new ArrayList<Admin>(); 
    Session session = factory.openSession();
    for (Object oneObject : session.createQuery("FROM Admin").getResultList()) {
        AdminList.add((Admin)oneObject);
    }
    session.close();
    return AdminList;
}

警告来自“类型推断”。

我有类似的问题。但是,我找到了一个没有“抑制警告”的解决方案。


最近,我发现了一种更短的方法,可以在没有类型推断的情况下编写相同的代码。

public List<Admin> getAdmins() {
    Session session = factory.openSession();
    TypedQuery<Admin> query = session.createQuery("FROM Admin");
    List<Admin> result = query.getResultList();
    session.close();
    return result;
}

希望它有帮助。


答案 2

不要从导入(现在已弃用)。而是从 “org.hibernate.query” 导入 。日食参考QUERYorg.hibernate


推荐