我正在尝试使用 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 值为空)和他们的孩子。所以只有两个层次。
我想创建选择所有父母和他们的孩子的查询,但是孩子有一个条件:它应该等于特定的 test_id。例如,要求只有test_id = 1的孩子。表由 Parent1 和 Child1 ( test_id = 2 ) 和 Parent2 和 Child2 ( test_id = 1 ) 组成。查询结果应该是 Parent1 没有孩子,Parent2 有 Child2。
询问:
from MyTable as myTable left fetch join myTable.children as child
where child.testId = 1
结果 - 我只得到那些有“1” test_id孩子的父母。但我需要所有的父母看看,即使没有需要的孩子。这里有什么问题:映射或查询?它实际上应该如何?
提前致谢。