#java #jpa #criteria
Вопрос:
У меня есть следующий иерархический класс данных.:
@Entity
class C {
Long id;
String name;
@OneToMany(mappedBy = "c")
@Fetch(value = FetchMode.SUBSELECT)
Set<B> bs;
//... Lots of other stuff
}
@Entity
class B {
@ManyToOne
private C c;
@OneToMany(mappedBy = "b")
@Fetch(value = FetchMode.SUBSELECT)
private Set<A> as;
//... Lots of other stuff
}
@Entity
class A {
Long id;
String name;
@ManyToOne
private B b;
//... Lots of other stuff
}
и некоторые «результирующие» классы:
class SimpleA {
Long id;
String name;
}
class SimpleC {
Long cId;
String cName;
List<SimpleA> as;
}
Поэтому я хочу запросить данные и преобразовать их в список SimpleC. Я использую критерии JPA, такие как sms —
CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
CriteriaQuery criteriaQuery = criteriaBuilder.createQuery(Object[].class);
Root<C> root = criteriaQuery.from(C.class);
Join<C, B> b = root.join("bs");
Join<B, A> a = b.join("as");
Query query = em.createQuery(criteriaQuery.select(criteriaBuilder.array(root.get("id"), root.get("name"), a.get("id"), a.get("name"))));
List resultList = query.getResultList();
а затем преобразуйте этот необработанный список в список C. Есть ли возможность получить его менее «низкоуровневым» способом? Я чувствую, что мне нужно изменить запрос, не могли бы вы подсказать мне, как именно?