命名查询的等效条件查询

我的命名查询看起来像这样,多亏了这里。

@NamedQuery( name="Cat.favourites", query="select c from Usercat as uc inner join uc.cat as c where uc.isFavourtie = true and uc.user = :user") 

而实现的调用看起来像这样:

 Session session = sessionFactory.getCurrentSession(); Query query = session.getNamedQuery("Cat.favourites"); query.setEntity("user", myCurrentUser); return query.list(); 

什么是返回猫列表的等效标准查询?

使用JPA 2.0 Criteria :(这是使用JPA 2.0 Criteria api实现此目的的众多方法之一)

 final CriteriaQuery cq = getCriteriaBuilder().createQuery(Cat.class); final CriteriaBuilder cb = entityManager.getCriteriaBuilder(); final Root uc= cq.from(Usercat.class); cq.select(uc.get("cat"); Predicate p = cb.equal(uc.get("favourtie", true); p = cb.and(p, cb.equal(uc.get("user"), user)); cq.where(p); final TypedQuery typedQuery = entityManager.createQuery(cq); return typedQuery.getResultList();