发现问题
今天学到Hibernate的查询所有对象Criteria,发现获取Criteria的方法createCriteria()已经过时
/**
* Create {@link Criteria} instance for the given class (entity or subclasses/implementors).
*
* @param persistentClass The class, which is an entity, or has entity subclasses/implementors
*
* @return The criteria instance for manipulation and execution
*
* @deprecated (since 5.2) for Session, use the JPA Criteria
*/
@Deprecated
Criteria createCriteria(Class persistentClass);
Hibernate推荐使用JPA的规范获取Criteria
解决问题
1.创建session对象(因为配置文件加载不一致,我这里默认获取到session)
Session session = factory.openSession();
2.创建CriteriaBuilder对象
CriteriaBuilder build = session.getCriteriaBuilder();
3.获取CriteriaQuery
CriteriaQuery<User> criteria = builder.createQuery(User.class);
4.指定根条件
criteria.from(User.class);
5.执行查询
Query<User>criteria.createQuery(criteria);
6.返回查询结果集
List<User> resultList = query.getResultList();
总结
之前用Criteria查询所有是这样的
List<User> categories = session.createCriteria(User.class).list();
因为用了JPA的规范,所以变成了上述这样,建议大家遵循规范,追赶时代潮流
Hibernate5.2中已不推荐使用Criteria,而是使用基于JPA规范的CriteriaQuery查询
Hibernate提供了一个较旧的遗留org.hibernate.CriteriaAPI,应被视为不推荐使用。没有功能开发将针对这些API。
最终,特定于Hibernate的标准功能将被移植到JPA的扩展javax.persistence.criteria.CriteriaQuery。
有关org.hibernate.CriteriaAPI的详细信息,请参阅传统Hibernate条件查询。
简单的使用流程如下
public List<Custom> findByAddressLike(String address) {
//这里使用JPA规范的CriteriaQuery
CriteriaBuilder crb=currentSession().getCriteriaBuilder();
CriteriaQuery<Custom> crq=crb.createQuery(Custom.class);
Root<Custom> root=crq.from(Custom.class);
crq.select(root);
crq.where(crb.like(root.get("address"),address));
return currentSession().createQuery(crq).getResultList();
}