Following entities:
@Table
class AA1 {
@Id
Long id;
String a_number;
Category category;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name= 'a_number', referencedColumnName='a_number')
@JoinColumn(name= 'category', referencedColumnName='category')
BB1 bb1
...other fields...
}
@Table
class BB1 {
@Id
String a_number;
Category category;
String value;
}
JPQL query:
SELECT a FROM AA1 a LEFT JOIN a.bb1 b;
Hibernate produces correct sql query, but when it tries to collect data it makes additional call like:
SELECT b.a_number, b.category, b.value FROM BB1 b WHERE b.a_number = ? AND b.category = ?
I checked that query returns null. How can I avoid such database queries?
My investigation: As far as I see Hibernate creates key by(AA1.a_number and AA1.category) and tries to retrieve entity from context. And for specific row 'left join' query returns null values and Hibernate asks context by key and context returns null, it leads to call to database for it.