如何在Spring Data REST中返回深层嵌套的投影?

14

考虑到这三个实体:

@Entity
class Department{
    Set<Employee> employees;
    Set<Employee> getEmployees(){
        return this.employees;
    };    
}

@Entity
class Employee{
    Nationality nationality;
    Nationality getNationality(){
        this.nationality;
    }
}
@Entity
class Nationality{

}

我想为部门创建一个投影,以返回所有部门及其雇员和国籍。我已经实现的是使用以下语句返回所有带有员工的部门:

@Projection(name = "fullDepartment", types = { Department.class })
public interface DepartmentsProjection {
    Set<Employee> getEmployees();
}

@RepositoryRestResource(collectionResourceRel = "department", path = "departments")
public interface DepartmentRepository extends JpaRepository<Department, Long> {
}

1
你解决了这个问题吗? - thorinkor
1个回答

24

一种方法是为您的嵌套对象创建一个投影,然后在更全局的投影中使用此投影。因此,根据您的问题,您可以为国籍创建一个投影,然后为具有获取器以捕获国籍投影的部门创建另一个投影,最后再创建一个投影以获取部门实体。

@Projection(name = "NationalityProjection", types = { Nationality.class })
public interface NationalityProjection{
    // getters of all attributes you want to project
}

@Projection(name = "EmployeeProjection", types = { Employee.class })
public interface EmployeeProjection{
    NationalityProjection getNationality();
}

@Projection(name = "DepartmentProjection", types = { Department.class })
public interface DepartmentProjection{
    Set<EmployeeProjection> getEmployees();
}

希望这能帮到你!


你能展示一下如何实现一个全局投影,它将返回上面定义的投影吗? - Charlie
1
@DeltaCharlie,实际上在我展示的代码中已经有了。例如,请检查EmployeeProjection是否已嵌套NationalityProjection,因此EmployeeProjectionEmployeeProjection更全局。DepartmentProjection接口也是同样的情况。 - alonso_50

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接