Hibernate 5中不推荐使用createCriteria方法

此调用已弃用:

session.createCriteria(Bus.class).list(); 

在源文件中,我可以看到:

 /** @deprecated */ @Deprecated Criteria createCriteria(Class var1); /** @deprecated */ @Deprecated Criteria createCriteria(Class var1, String var2); /** @deprecated */ @Deprecated Criteria createCriteria(String var1); /** @deprecated */ @Deprecated Criteria createCriteria(String var1, String var2); 

但我无法理解我必须使用哪种方法而不是createCriteria

您可以在Hibernate 5.2 +中使用以下界面:

 javax.persistence.criteria.CriteriaBuilder javax.persistence.criteria.CriteriaQuery // Create CriteriaBuilder CriteriaBuilder builder = session.getCriteriaBuilder(); // Create CriteriaQuery CriteriaQuery criteria = builder.createQuery(YourClass.class); 

截至2018年3月增加答案。

依赖关系:

 import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.boot.MetadataSources; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.service.ServiceRegistry; import javax.persistence.criteria.CriteriaQuery; import java.util.List; public static List fecthAllContacts() { Session session = sessionFactory.openSession(); // create Criteria CriteriaQuery criteriaQuery = session.getCriteriaBuilder().createQuery(Contact.class); criteriaQuery.from(Contact.class); List contacts = session.createQuery(criteriaQuery).getResultList(); session.close(); return contacts; } 

sessionFactory是:

 public static SessionFactory buildSessionFactory() { final ServiceRegistry registry = new StandardServiceRegistryBuilder().configure().build(); return new MetadataSources(registry).buildMetadata().buildSessionFactory(); } 

我有以下方法,出于安全原因更改了对象名称:

 public List listAllForIds(List ids) { Criteria criteria = getSessionFactory().getCurrentSession().createCriteria(MyObject.class) .createAlias("joinObject", "joinObject") .add(Restrictions.not(Restrictions.like("name", "string1", MatchMode.END))) .add(Restrictions.not(Restrictions.like("name", "string2", MatchMode.END))) .add(Restrictions.in("joinObject.id", ids)); return criteria.list(); } 

改变使用方法:

 javax.persistence.criteria.CriteriaBuilder javax.persistence.criteria.CriteriaQuery 

查询如下所示:

 public List listAllForIds(List ids) { CriteriaBuilder builder = getSessionFactory().getCurrentSession().getCriteriaBuilder(); CriteriaQuery criteria = builder.createQuery(MyObject.class); Root myObjectRoot = criteria.from(MyObject.class); Join joinObject = myObjectRoot.join("joinObject"); Predicate likeRestriction = builder.and( builder.notLike( myObjectRoot.get("name"), "%string1"), builder.notLike( myObjectRoot.get("name"), "%string2") ); criteria.select(myObjectRoot).where(joinObject.get("id").in(ids), likeRestriction); TypedQuery query = getSessionFactory().getCurrentSession().createQuery(criteria); return query.getResultList(); } 

希望它可以帮助其他人,请随时建议任何改善代码的渠道。

来自API文档:

@Deprecated Criteria createCriteria(Class persistentClass)已过时。 (自5.2起)对于Session,使用给定类(实体或子类/实现者)的JPA Criteria Create Criteria实例。 参数:persistentClass – 类,它是一个实体,或者具有实体子类/实现者返回:操作和执行的条件实例

所以它简要地说……

使用JPA Criteria Create Criteria