Hibernate native query also gets JPA select
I have a two database tables, "A" and "B" with @OneToMany(mappedBy = "a") on a List<B> field in entity A, and a @ManyToOne on field B.a. I ran into the "N+1" problem when doing default queries on A, so I am trying a native query such as:
@Query(value="select * from A as a left join B as b " +
"on a.ID = b.b ",
nativeQuery=true)
This works in the sense that the data is mapped back to the entities as expected.
My problem is that I can see that Hibernate is doing a separate select for each B rather than using the results of the join. That is, I see in the console a sequence of:
- The select that I specified
- For each instance of A, another select for B using the ID from A
In other words, I've still got the "n+1" problem.
I figured that the @OneToMany and @ManyToOne annotations might be causing Hibernate to do these extra selects, but when I take them out, my IDE (IntelliJ) says:
'Basic' attribute should not be a container
... on the List property in A.
How can I get it to map the results back in a single select with join? Should I just give up on Hibernate and JPA?
I am using spring-boot-start-data-jpa.2.5.4
from Recent Questions - Stack Overflow https://ift.tt/3vUGn0N
https://ift.tt/eA8V8J
Comments
Post a Comment