作为我们数据端的需求,有一个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_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);
}}
现在我想获取 CategoryDto 的完整列表,其中包含其子列表,因为随后可以轻松处理它。就像 DaoImpl:
List<CategoryDto> fetchAll();
那么这个方法应该怎么实现呢?我用的是spring boot + Jpa框架
最佳答案
@Query("select category from CategoryDto category where category.deleteStatus != ?1")
CategoryDto findAllBydeleteStatus(Integer deleteStatus);
文档:https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods.query-creation
关于java - 我们如何通过Jpa获取完整的分层数据列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57708620/