CriteriaBuilder Родительский множественный выбор с дочерним объектом - PullRequest
1 голос
/ 06 августа 2020

Я пытаюсь создать критерии запроса с родительскими дочерними объектами, мне нужно использовать множественный выбор для выбранных полей для родительских и выбранных полей для дочерних, не могу вытащить всех дочерних элементов с полями


@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 не включает дочерние элементы. Кто-нибудь сталкивался с этим>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...