JPA Entity Graph

93 Views Asked by At

I have an entity like this

@Entity
@Table(name = "ACQ_OPERATION")
@Getter
@Setter
@NamedEntityGraph(
        name = "acquiringoperation-entity-graph",
        attributeNodes = {
                @NamedAttributeNode("cardData"),
        }
)
public class AcquiringOperation extends GenericEntity<Long> {
    ...

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "card_data_id")
    private CardData cardData;

    ...
}

As you can see CardData entity has a FetchType.LAZY fetch type. I want to fetch AcquiringOperation with CardData in one query with left join.

When I try to get data with JPQL

EntityGraph<AcquiringOperation> entityGraph = (EntityGraph<AcquiringOperation>) dataService.getEntityManager().getEntityGraph("acquiringoperation-entity-graph");

    acquiringOperations = dataService.getEntityManager().createQuery("select p from AcquiringOperation p", AcquiringOperation.class)
            .setHint("jakarta.persistence.fetchgraph", entityGraph)
            .getResultList().stream().limit(10).collect(toList());

I got n+1 queries

For AcquiringOperation entity

select
    acquiringo0_.id as id1_1_,
    ...
from
    ncs_core.acq_operation acquiringo0_

and for query for CardData for every record

select
    carddata0_.id as id1_5_0_,
    ...
from
    ncs_core.card_data carddata0_ 
where
    carddata0_.id=?

On another hand when I'm using repository for data fetching

public interface AcquiringOperationRepository extends BaseRepository<AcquiringOperation> {
    @Override
    @EntityGraph(attributePaths = {"cardData"})
    List<AcquiringOperation> findAll();
}

acquiringOperations = acquiringOperationRepository.findAll().stream().limit(10).collect(toList());

t works like a charm with one "left joined query"

select
    ...
    carddata1_.year as year6_5_1_ 
from
    ncs_core.acq_operation acquiringo0_ 
left outer join
    ncs_core.card_data carddata1_ 
        on acquiringo0_.card_data_id=carddata1_.id

I want to use JPQL or QDSL queries. How can I do this with JPA Entity Graph?

0

There are 0 best solutions below