2011-10-27 103 views
2

我命名查询看起来是这样的,由于here.等效标准查询命名查询

@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(); 

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

回答

1

随着JPA 2.0标准: (这其中的很多方法可以做到这一点使用JPA 2.0标准API之一)

final CriteriaQuery<Cat> cq = getCriteriaBuilder().createQuery(Cat.class); 
final CriteriaBuilder cb = entityManager.getCriteriaBuilder(); 

final Root<Usercat> 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<Cat> typedQuery = entityManager.createQuery(cq); 
return typedQuery.getResultList();