使用泛型的Hibernate 5条件查询

问题描述 投票:1回答:1

Hibernate的新增功能,对于Hibernate 5,我正在尝试编写一个函数,该函数将使用条件查询返回表的所有行。需要让它针对不同的实体类型运行,因此需要知道如何使用泛型。

Session session = HibernateUtil.getHibernateSession();
CriteriaBuilder cb = session.getCriteriaBuilder();
CriteriaQuery<Item> cr = cb.createQuery(Item.class);
Root<Item> root = cr.from(Item.class);
cr.select(root);

Query<Item> query = session.createQuery(cr);
List<Item> results = query.getResultList();

我们可以将以上代码放入通用方法中,并用于任何实体类型。

因此,与其指定“ Item.class”,而是使用通用类型。类似于:

List<T> getAllRows(Class <T>){
    Session session = HibernateUtil.getHibernateSession();
    CriteriaBuilder cb = session.getCriteriaBuilder();
    CriteriaQuery<T> cr = cb.createQuery(T);
    Root<T> root = cr.from(T);
    cr.select(root);

    Query<T> query = session.createQuery(cr);
    return query.getResultList();
}

我上面知道的是不正确的,只是期望像这样,在这里我可以将实体类型作为参数传递,并检索它的所有行。

检索为:

List<EntityType> list = getAllRows(EntityType);

编辑2:

第一个答案很好,谢谢。

我们可以将上面声明了变量并在此api中定义的代码的上面的代码扩展为:

CriteriaQuery<T> cr;
Root<T> root;
Query<T> query;

public <T> List<T findAll(Class<T > clazz){
Session session = HibernateUtil.getHibernateSession();
CriteriaBuilder cb = session.getCriteriaBuilder();
cr = cb.createQuery(clazz);
root = cr.from(clazz);
query=session.createQuery(cr);
return query.getResultList();
}

并且仍然以与::>相同的方式调用

 List <Item> list = findAll(Item.class);

只是想知道是否可以单独声明并在api中使用它们。预先感谢。

Hibernate的新增功能,对于Hibernate 5,我正在尝试编写一个函数,该函数将使用条件查询返回表的所有行。需要让它针对不同的实体类型运行,因此需要知道如何...

java hibernate generics hibernate-5.x
1个回答
0
投票

基本解决方案:

© www.soinside.com 2019 - 2024. All rights reserved.