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,我正在尝试编写一个函数,该函数将使用条件查询返回表的所有行。需要让它针对不同的实体类型运行,因此需要知道如何...
基本解决方案: