У меня есть база данных с 3 таблицами.
LANGUAGE
id
ARTICLE
-id
ARTICLE_DETAIL
-id
-articleId
-languageId
Мне нужно получить статью из базы данных, но только если она содержит подробности статьи на определенном языке.Сегодня у меня есть запрос в нативном MySQL с использованием коалессии, и это прекрасно работает.Но теперь я хочу сделать то же самое в 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;