【问题标题】:How to return deep nested projections in Spring data rest?如何在 Spring 数据休息中返回深层嵌套投影?
【发布时间】:2016-12-18 19:08:34
【问题描述】:

鉴于这 3 个实体:

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

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

}

我想为 Department 创建一个投影,返回所有部门及其员工和国籍。我所取得的成就是让所有部门及其员工使用:

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

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

【问题讨论】:

  • 你解决了这个问题吗?

标签: java spring projection spring-data-rest


【解决方案1】:

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

@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();
}

希望对你有帮助!

【讨论】:

  • 您能否展示如何实现一个全局投影,该投影将返回上面定义的投影?
  • @DeltaCharlie 实际上它现在就在我展示的代码中。例如,请检查EmployeeProjection 是否嵌套了NationalityProjection,因此EmployeeProjectionEmployeeProjection 更具有全局性。 DepartmentProjection 接口也发生了同样的情况。
猜你喜欢
  • 2016-03-23
  • 2021-09-22
  • 1970-01-01
  • 2017-12-11
  • 2021-06-19
  • 2015-02-05
  • 1970-01-01
  • 2018-05-28
  • 2016-06-11
相关资源
最近更新 更多