Я использую Hibernate 4.3.11.Final с базой данных H2 (на основе диска)
Ключевые классы Hibernate:
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;
}
Я проверял сгенерированные запросы Hibernate, чтобы определить,Я могу удивиться, обнаружив, что
объединений были левыми внешними соединениями, я предполагал, что они будут левыми внутренними соединениями, поскольку CoverArt существует только как часть песни.CoverImage существует независимо, так как здесь хранятся большие данные изображения, поэтому я хочу поделиться ими с песнями, но когда я извлекаю песню, меня интересуют только CoverImages, связанные через CoverArt.
Могу ли я внести некоторые изменения, чтобы улучшить это?
....
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 (?)