HQL で単純な選択クエリを作成しようとしています。クエリで使用されるエンティティがあります。次のようになります。
@Entity
@Table(name = "my_table")
public class MyTable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Long id;
@Column(name = "name")
private String name;
@Column(name = "test_id")
private Long testId;
@Column(name = "parent_id")
private Long parentId;
@OneToMany(mappedBy = "parentId",
fetch = FetchType.EAGER,
cascade = CascadeType.ALL)
private Set<MyTable> children = new HashSet<MyTable>();
//getters and setters
}
階層は単純です。親 (parent_id 値が null) とその子が存在します。だから2レベルだけ。
すべての親とその子を選択するクエリを作成したいのですが、子には特定のtest_idと等しいという条件があります。たとえば、 test_id = 1の子のみが必要です。テーブルは、Child1 を持つ Parent1 ( test_id = 2 ) と Child2 を持つ Parent2 ( test_id = 1 ) で構成されます。クエリの結果は、子のない Parent1 と、Child2 のある Parent2 になります。
クエリ:
from MyTable as myTable left fetch join myTable.children as child
where child.testId = 1
その結果、 「1」 test_idを持つ子を持つ親のみを取得しています。しかし、必要な子供がいなくても、すべての親に見てもらう必要があります。ここで何が間違っていますか: マッピングまたはクエリ? そして、それは実際にはどうあるべきですか?
前もって感謝します。