【发布时间】:2020-06-02 04:26:25
【问题描述】:
我在 Hibernate 中有一个 Folder 实体,如下所示:
@Entity
@Table(name = "folders")
public class Folder {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "folder_id", unique = true, nullable = false)
private int id;
@NonNull
@Column(name = "name", length = 100, unique = true, nullable = false)
private String name;
@OneToMany(fetch = FetchType.EAGER, mappedBy = "parent", orphanRemoval = true)
@Column(name = "sub_folders")
private Set<Folder> childFolders = new HashSet<>();
@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JsonIgnore
@JoinColumn(name = "parent", referencedColumnName = "folder_id", nullable = true)
private Folder parent;
public Folder() {
}
}
我正在尝试编写一个查找器方法或自定义查询来执行我在主题中所写的操作。
因此,如果我发送一个类似于 folders/{parent_folder_id} 的请求,假设值是 1,我应该得到对象 4 和 5,但没有他们的孩子,所以不包括 6,7,8 and 9。
理想情况下,最好使用休眠查询。如果没有,任何 sql 语言也可以。我会尝试让它进入休眠状态。
这就是我得到的,我还有孩子......
@Query(value = "Select * from folders f where f.parent = ?1 ", nativeQuery = true)
Set<Folder> getFolders(int folder_id);
【问题讨论】:
-
对孩子使用 Lazy fetching
-
是否将关系配置为惰性然后对查询中的第一级子级使用显式连接获取?
-
@JensSchauder 我尝试了其他一些具有惰性获取类型的查询,但没有奏效。我是休眠/春季新手。这是我得到的关闭,我什至不确定休眠的正确语法..
-
@MiljanPuletic 用于响应您使用的类。你能分享你的完整代码吗?
标签: mysql hibernate tree spring-data-jpa recursive-query