Java 我们如何通过Jpa获得完整的分层数据列表

Java 我们如何通过Jpa获得完整的分层数据列表,java,mysql,spring-boot,spring-data-jpa,Java,Mysql,Spring Boot,Spring Data Jpa,根据我们的数据端需求,有如下mysql表结构: id category_id category_name parent_id delete_status 3 145 Lip Makeup 123 0 2 134 Face Makeup 123 0 1 123 Makeup 0 0 数据结构类似于树,id=1的代码是其他2条记录

根据我们的数据端需求,有如下mysql表结构:

id  category_id category_name   parent_id   delete_status
 3  145         Lip Makeup      123           0
 2  134         Face Makeup     123           0
 1  123         Makeup          0             0
数据结构类似于树,id=1的代码是其他2条记录(id=2和id=3)的父记录。连接列为
parent\u id
,映射DTO为:

@Entity
@Data
@Table(name = "category_tab")
public class CategoryDto {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", unique = true, nullable = false, length = 20)
private long id;

@Column(name = "category_id", nullable = false)
Long categoryId;

@Column(name = "category_name", nullable = false)
String name;

@Column(name = "parent_id", nullable = false)
Long parentId;

@Column(name = "delete_status", nullable = false)
Integer deleteStatus;

@OneToMany(fetch = FetchType.LAZY)
@JoinColumn(name = "parent_id", insertable = false, updatable = false)
private Set<CategoryDto> children = new HashSet<>();

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    ShopeeCategoryDto that = (ShopeeCategoryDto) o;
    return Objects.equals(categoryId, that.categoryId) &&
            Objects.equals(name, that.name);
}

@Override
public int hashCode() {
    return Objects.hash(categoryId, name);
}}
@实体
@资料
@表(name=“category\u tab”)
公共类类别{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
@列(name=“id”,unique=true,nullable=false,length=20)
私人长id;
@列(name=“category\u id”,null=false)
长类;
@列(name=“category\u name”,nullable=false)
字符串名;
@列(name=“parent\u id”,null=false)
长父ID;
@列(name=“delete\u status”,nullable=false)
整数删除状态;
@OneToMany(fetch=FetchType.LAZY)
@JoinColumn(name=“parent\u id”,insertable=false,updateable=false)
private Set children=new HashSet();
@凌驾
公共布尔等于(对象o){
如果(this==o)返回true;
如果(o==null | | getClass()!=o.getClass())返回false;
ShopeeCategoryTo that=(ShopeeCategoryTo)o;
返回Objects.equals(categoryId,that.categoryId)&&
Objects.equals(name,that.name);
}
@凌驾
公共int hashCode(){
返回Objects.hash(categoryId,name);
}}
现在,我想获得CategoryTo的完整列表,其中包含其子列表,因为随后可以轻松处理它。就像DaoImpl一样:

List<CategoryDto> fetchAll();
List fetchAll();
那么我应该如何实现这个方法呢?我使用了SpringBoot+Jpa框架

@Query("select category from CategoryDto category where category.deleteStatus != ?1")
CategoryDto findAllBydeleteStatus(Integer deleteStatus);
文件:


Docs:

这只是一个示例,不是我需要的,我已经用这个方法删除了它,您将获得所有categoryDto及其父categoryDto集,其中deleteStatus不是函数参数中提供的。明白了,让我试试这只是一个示例,不是我需要的,我用这个方法删除了它,您将获得所有categoryDto及其父categoryDto集,其中deleteStatus不是函数参数中提供的。了解,让我试试