Я пытаюсь создать критерии запроса с родительскими дочерними объектами, мне нужно использовать множественный выбор для выбранных полей для родительских и выбранных полей для дочерних, не могу вытащить всех дочерних элементов с полями
@Data
@Entity
@NoArgsConstructor
@Table( name = "Orders" )
public class Orders {
@Id
@Column( name = "ORDER_ID" )
private String orderId;
...
@OneToMany(cascade= CascadeType.ALL, mappedBy = "order")
@NotFound(action = NotFoundAction.IGNORE)
private List<Contact> contacts;
...
}
@Data
@Entity
@NoArgsConstructor
@Table( name = "CONTACT" )
public class Contact {
@Id
@Column( name = "ORDER_ID" )
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn (name="ORDER_ID",referencedColumnName="ORDER_ID",insertable=false, updatable=false)
private Order order;
...
}
My Реализация запроса
List<String> fields ={"OrderId","OrderName","OrderDate"};
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Tuple> cq = cb.createTupleQuery();
Root<Order> root = cq.from(Order.class);
ListJoin join = root.joinList("contacts");
Subquery<Contact> squery = criteriaQuery.subquery(Contact.class);
Root<Contact> contactRoot = squery.from(Contact.class);
Join<Contact, Order> join2 = contactRoot.join("order");
squery.select(contactRoot).where(criteriaBuilder.equal(join, root));
Predicate predicate = specification.toPredicate(root,cq, cb);
List<Selection<?>> selections=new ArrayList<>();
fields.forEach(field -> selections.add(root.get(field).alias(field)));
cq.multiselect(selections);
cq.where(predicate);
TypedQuery<Tuple> typedQuery=entityManager.createQuery(cq);
return typedQuery.getResultList();
Я вижу, что соединение правильное, но предложение select не включает дочерние элементы. Кто-нибудь сталкивался с этим>