2
respostas

Como retornar de uma pesquisa JPA uma lista de um VO específico que contenha um atributo lista de outro VO ?

Possuo os dois respectivos VOs

@Builder
public class PlanVO  {
    private Long id;
    private String name;
    private List<OfferVO> offerVo;
}

@Builder
public class OfferVO  {
    private String key;
    private BigDecimal price;
}

Ambos representam respectivamente as entidades Plan e Offer (que possuem vários outros atributos) com um relacionamento de um para muitos, um plano pode ter várias ofertas. Quero retornar uma lista de PlanVO a partir de uma consulta JPA, é possível ?

Sei que desta maneira consigo retornar a lista de PlanVO sem a lista de OfferVO setada em cada um.

SELECT NEW PlanVO (plan.id, plan.name) FROM SubscriptionPlan plan

Porém gostaria de trazer todas as OfferVO's em cada PlanVO, é possível ?

2 respostas

É possível, pessoal ?

Olá Tiago, tudo bem amigo?

Sim, é possível retornar uma lista de PlanVO com a lista de OfferVO em cada um. Para isso, você pode utilizar a função FETCH na sua consulta JPA.

A função FETCH é utilizada para trazer os relacionamentos de uma entidade na mesma consulta, evitando assim o carregamento preguiçoso (lazy loading) dos dados.

No seu caso, a consulta ficaria assim:

SELECT DISTINCT p FROM Plan p LEFT JOIN FETCH p.offerVo

Dessa forma, ao executar essa consulta, você terá uma lista de PlanVO com a lista de OfferVO em cada um.

Espero ter ajudado e bons estudos!