У меня есть 2 сопоставленных объекта, и я хочу получить определенные поля, используя Criteria API .Можно использовать метод root.join(...)
, но я хочу использовать root.fetch(...)
.
. Это мой код.
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Post> q = cb.createQuery(Post.class);
Root<Post> root = q.from(Post.class);
Join<Post, PostComment> join = root.join(Post_.comments);
q.multiselect(root.get(Post_.id),join.get(PostComment_.review));
return em.createQuery(q).getResultList();
Это работает нормально и возвращает только 2 поля: идентификатор и просмотр,но возвращенные данные дублируются, и к каждому сообщению добавляется только один комментарий (работает как соединение с базой данных).Я хотел бы сделать:
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Post> q = cb.createQuery(Post.class);
Root<Post> root = q.from(Post.class);
Fetch<Post, PostComment> fetch = root.fetch(Post_.comments);
q.multiselect(root.get(Post_.id),fetch.get(PostComment_.review));
return em.createQuery(q).getResultList();
, но fetch.get()
не является функцией.Как я могу это сделать?