Skip to content

Issue with wrong eager fetch reported #26

@Hollerweger

Description

@Hollerweger

I have following Repository:

public interface ObjectRepository extends JpaRepository<ObjectEntity, Long>,
		JpaSpecificationExecutor<ObjectEntity> {

	@Query("select distinct so from ObjectEntity so join fetch so.objectAssignmentCounts where so.customerId= :customerId and so.id IN (:ids)")
	List<ObjectEntity> getObjectsById(@Param("customerId") Long customerId, @Param("ids") List<Long> ids, Sort sort);
}

In my test code I call my API several times which will call the ObjectRepository.getObjectsById with different paramerts and sorting.

I see that sometimes the testcase fails if running multiple tests in sequence.
It seems that the proxy method for the getObjectById is then the same but only the sorting is different.
Eg.: proxyMethodName= com.sun.proxy.$Proxy195getObjectsById

initial query:
select distinct ... order by obje0_.created_at asc
new query:
select distinct ... order by obje0_.name asc

This is then causing to increment the select queries count and report an error:

com/yannbriancon/interceptor/HibernateQueryInterceptor.java:212
selectQueriesInfoPerProxyMethod.put(proxyMethodName, selectQueriesInfo.incrementSelectQueriesCount());
2021-05-12 21:28:11.635 ERROR 4168c0df-cbe7-47d7-aa89-18ec834b214f  GlobalExceptionHandler:332 - N+1 queries detected with eager fetching on the entity com.test.jpa.model.ObjectEntity
    at com.test.service.QueryService.getObjects(QueryService.java:148)
    Hint: Missing Lazy fetching configuration on a field of type com.test.jpa.model.ObjectEntity of one of the entities fetched in the query

I can't reproduce it if I debug a single test or try to stop the debugger on this testcase.
I need to set a breakpoint on com/yannbriancon/interceptor/HibernateQueryInterceptor.java:212 while running tests in sequence.

I think it's a mix of a threading/testcase-seperation issue together with the sorting of spring data so that same proxy method is used.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions