2012-04-17 35 views
0

私はJPAとJAVAでレコードを選択すると、このようなplayframeworkよ:選択クエリ(JPA)

EntityManager em = JPA.em(); 
List<News> resultUrl = News.find("link", url).fetch(); 
if (resultUrl.isEmpty()) { //check if it is exist 
} 

しかし、私は2つの条件でレコードを選択したい、このように:

where link='url' and name='joe' 

どうすればいいですか? ありがとうございます。 最高の願い。

答えて

0

CriteriaBuilder、CriteriaQueryと述語を見てみましょう:

EntityManager em = JPA.em(); 
CriteriaBuilder cb = em.getCriteriaBuilder(); 
CriteriaQuery<T> criteriaQuery = cb.createQuery(News.class); 
Root<T> root = criteriaQuery.from(News.class); 
criteriaQuery.select(root); 

List<Predicate> ps = new ArrayList<Predicate>(); 
ps.add(sb.equal(root.get("link", url)); 
ps.add(sb.equal(root.get("name", "joe")); 

criteriaQuery.where(cb.and(ps.toArray(new Predicate[0]))); 

List<News> resultUrl = em.createQuery(criteriaQuery).getResultList(); 

よろしく

2

用途:

Query q = em.createQuery("FROM News n WHERE n.link=:url and n.name=:name"); 
q.setParameter("url", "url").setParameter("name", "joe"); 
List<News> resultUrl = q.getResultList(); 

...プレイでそれを行うには

2

一つの方法があります

List<News> resultUrl = News.find("byLinkAndName", url, "joe").fetch(); 
if (resultUrl.isEmpty()) { //check if it is exist 
} 

別:

List<News> resultUrl = News.find("link = ? and name = ?", url, "joe").fetch(); 
if (resultUrl.isEmpty()) { //check if it is exist 
} 
+0

を心配する必要はありません。エンティティマネージャーPlayはこれをあなたのためにすべて処理します。 – emt14

2

が私の提案は、名前付きクエリを定義することです:

@Entity 
@NamedQueries({ 
    @NamedQuery(name = News.FIND_BY_URL_AND_NAME, query = "Select n FROM News as n WHERE n.url=:" + News.PARAM_URL + " AND n.name=:" + News.PARAM_NAME) 
}) 
public class News { 
    public static final String FIND_BY_URL_AND_NAME = "News.findByUrlAndName"; 
    public static final String PARAM_URL = "url"; 
    public static final String PARAM_NAME = "name"; 

    //CONTINUE 
} 

次に、あなたがそのようにそれを呼び出す:

Query query = em.createNamedQuery(News.FIND_BY_URL_AND_NAME); 
query.setParameter(News.PARAM_URL, "url"); 
query.setParameter(News.PARAM_NAME, "name"); 
List<News> news = query.getResultList();