私は再帰的な関連付けを持つテーブルを持っています:
コンテナーは、親 (Column container_id) に関連付けることができます。コンテナはコンテナを子として持つことができます。
@Entity
public class Container implements Serializable {
@ManyToOne
@JoinColumn(name = "container_id", nullable = true, referencedColumnName = "original_id")
private Container containedIn;
@Column(name = "original_id")
private long originalId;
@OneToMany(mappedBy = "containedIn")
private List<Container> contains = new ArrayList<>();
...
問題:
生成されたリクエストは次のとおりです。
Hibernate: select * from (
select *
from container con0_, container con1_
where con0_.container_id=con1_.original_id
order by con1_.code ) where rownum <= ?
私は左外部結合を期待しています:
from container con0_ left outer join container con1_
on con0_.container_id=con1_.original_id.
親を持たないコンテナー (ルート ボックス CON0000007) は、Hibernate によって左結合が生成されないため、取得されません。
ID | ORIGINAL_ID| コード | タイプ | CONTAINER_ID (親)
1 | 2 | CON000000002 | パッケージ | 12
2 | 4 | CON000000004 | パッケージ | 10
4 | 6 | CON000000006 | パッケージ | 11
5 | 8 | CON000000008 | パッケージ | 10
7 | 10 | CON0000002 | ボックス | 15
8 | 11 | CON0000003 | ボックス | 15
9 | 12 | CON0000004 | ボックス | 15
12 | 15 | CON0000007 | ルートボックス | ヌル