0

私はJPAと次のようなプレイフレームワークを使用してJAVAのレコードを選択しています。

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'

これどうやってするの?助けてくれてありがとう。幸運をお祈りしています。

4

4 に答える 4

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

...

于 2012-04-17T08:16:07.027 に答える
2

Play でそれを行う 1 つの方法は、

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
}
于 2012-04-17T08:47:32.883 に答える
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();
于 2012-04-17T08:48:02.870 に答える
0

CriteriaBuilder、CriteriaQuery、Predicate を見てみましょう。

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

よろしく

于 2012-04-17T08:13:44.000 に答える