我试图用HQL创建简单的选择查询。 有一个将用于查询的实体。它看上去像下面这样:具有父子关系的实体(单个表)的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)组成。查询结果应该是没有孩子的父母1和孩子2的父母2。
查询:
from MyTable as myTable left fetch join myTable.children as child
where child.testId = 1
结果 - 我只获得其中有“1” 孩子的家长为test_id。但即使没有需要的孩子,我也需要所有的父母。 这里有什么错:映射或查询?它应该如何呢?
在此先感谢。
是的,我试过相同的映射,然后我试图删除双向映射 - 它也适用(不知道如何)。无论如何感谢解释 - 我会照你说的去做。其实我正在寻找正确的查询。我希望可能有办法让父母没有不需要的孩子。但是...感谢您的重播。 –