HQL을 사용하여 간단한 select 쿼리를 작성하려고합니다. 쿼리에 사용할 엔터티가 있습니다. 그것은 다음과 같이 보입니다 :상위 - 하위 관계가있는 엔티티 (단일 테이블)에 대한 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
}
계층 구조가 간단합니다. 부모 (null parent_id 값을 가짐)와 그 하위가 있습니다. 그래서 두 단계 만.
모든 부모와 그 자녀를 선택하는 쿼리를 만들고 싶습니다. 그러나 아이들을위한 조건이 있습니다. 구체적으로는 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. 그러나 필요한 모든 자녀가 없더라도 모든 부모님이보아야합니다. 매핑 또는 쿼리가 잘못되었습니다. 실제로 어떻게되어야합니까?
미리 감사드립니다.
예, 동일한 매핑을 시도한 다음 bidirectical 매핑을 제거하려고했습니다. 잘 작동합니다 (잘 모름). 어쨌든 설명 해줘서 고마워요. 실제로 정확한 쿼리가 검색되었습니다. 나는 어쩌면 불필요한 아이들없이 부모를 얻는 방법이 있을지도 모른다고 생각했다. 하지만 ... 당신의 재계에 감사드립니다. –