Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Hibernate使用外部联接_Hibernate_Jpa_Orm_Jpa 2.0 - Fatal编程技术网

为什么Hibernate使用外部联接

为什么Hibernate使用外部联接,hibernate,jpa,orm,jpa-2.0,Hibernate,Jpa,Orm,Jpa 2.0,我正在使用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 CoverA

我正在使用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;
}

如果使用内部连接,则将自动仅获取具有非空Song_CoverArt、CoverArt和CoverImage的歌曲。如果其中任何条目不存在,则不会返回整个条目。通过使用外部连接,您可以获得所有请求的歌曲,缺少的值为空。

不,如果我使用左内部连接,则不会。实际上,我可能会感到困惑,因为当我查看自己的SQL时,它只会说“左连接”,而不是“左内部”或“左外部”。如果HIbernate确实返回了一首包含CoverArt但没有CoverImage的歌曲,我有一个后续问题,这会给我带来问题,我可以防止这种情况发生,使最终连接成为常规的内部连接吗?外部在左侧的外部连接是可选的。至于在HIbernate中强制内部连接,在stackoverflow上有几个问题的答案,我不确定哪一个最适合你的情况。所以搜索hibernate内部连接,希望其中一个会点击。
 ....
 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 (?)