2011-10-27 151 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();