2011-08-11 9 views
0

私は3つのテーブルを持つデータベースを持っています。特定の値を持つ別のエンティティと結合されているエンティティのクエリ?

特定の言語の記事の詳細がある場合のみ、データベースから記事を取得する必要があります。今日、私は、ネイティブのMySQLのクエリをcoalesceを使用して、それは正常に動作します。しかし今、私はEJB3でも同じことをしたいと思います。私はいろいろなことを試みましたが、これまでに失敗しました。私はEJB3のエンティティでの作業に慣れていないので、誰かがここで正しい軌道に乗るのを助けてくれたら、私はそれを感謝します。

Integer id = 543; // id of an article 
Integer languageId = 2; // id of a language 

CriteriaBuilder cb = em.getCriteriaBuilder(); 
CriteriaQuery<Article> cq = cb.createQuery(Article.class); 
Root<Article> article = cq.from(Article.class); 
Join<Article, ArticleDetail> details = article.join(Article_.articleDetailList); 

// I think this is where I go wrong 
cq.where(article.get(Article_.id).in(id)).where(details.get(ArticleDetail_.languageId).in(languageId)); 

TypedQuery<Article> q = em.createQuery(cq); 
Article result = (Article) q.getSingleResult(); 
return result; 

答えて

0

これは仕事をした:

... 
CriteriaBuilder cb = em.getCriteriaBuilder(); 
CriteriaQuery<Article> cq = cb.createQuery(Article.class); 
Root<Article> article = cq.from(Article.class); 
Join<Article, ArticleDetail> details = article.join(Article_.articleDetailList); 
Join<ArticleDetail, Language> language = details.join(ArticleDetail_.languageId); 
cq.where(cb.and(
    cb.equal(article.get(Article_.id), id), 
    cb.equal(language.get(Language_.id), languageId))); 
... 

は、ここで私はこれまでにしようとしてきたものを、多かれ少なかれです

関連する問題