I am using Hibernate 4.3.11.Final with H2 (disk based) database
Key Hibernate Classes are
public class Song
{
@Id
private Integer recNo;
....
@OneToMany(fetch=FetchType.EAGER, cascade={CascadeType.ALL})
private List<CoverArt> coverArts;
}
public class CoverArt
{
@Id
@GeneratedValue
private Integer id;
.......
@OneToOne
private CoverImage coverImage;
}
public class CoverImage
{
@Id
@Column(length = 1000)
private String dataKey;
}
I have been examining the Hibernate Queries generated to see if I can improve performance by reducing database calls, I was suprised to find that
Joins were LEFT OUTER JOINS, I assumed they would be LEFT INNER JOINS since CoverArt only exists as part of a Song. CoverImage does exist independently since this stores large image data so want shared between songs, but when I am retrieving a song Im only interested in CoverImages linked via CoverArt.
Are there some adjustments I can make to improve this ?
....
from Song this_
left outer join Song_CoverArt coverarts2_ on this_.recNo=coverarts2_.Song_recNo
left outer join CoverArt coverart3_ on coverarts2_.coverArts_id=coverart3_.id
left outer join CoverImage coverimage4_ on coverart3_.coverImage_dataKey=coverimage4_.dataKey
where this_.recNo in (?)