2016-08-11 43 views
5

Biorąc to 3 podmioty:Jak zwrócić głęboko zagnieżdżone rzuty w spoczynku danych Spring?

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

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

} 

Chcę utworzyć projekcję dla Department zwracającą wszystkie działy ze swoich pracowników i narodowości. Co udało mi się osiągnąć to, aby zwrócić wszystkie wydziały z ich pracowników przy użyciu:

@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

Czy udało się rozwiązać ten problem? – thorinkor

Odpowiedz

5

sposób to zrobić jest stworzenie Projekcja dla zagnieżdżonych (ów) obiektu, a następnie skorzystać z tej projekcji w sposób bardziej globalny. Więc podążając za twoim problemem, możesz stworzyć projekcję dla narodowości, potem inną dla Departamentu, który ma chwyt, żeby złapać projekcję Narodowości, a na końcu kolejną projekcję, aby uzyskać jednostkę Departamentu.

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

Mam nadzieję, że pomoże!

+0

Czy możesz pokazać, w jaki sposób zaimplementujesz globalną projekcję, która zwróci przewidywania zdefiniowane powyżej? –

+0

@DeltaCharlie faktycznie jest teraz w kodzie, który pokazałem. Na przykład sprawdź, czy 'EmployeeProjection' zagnieździł' NationalityProjection', więc 'EmployeeProjection' jest bardziej globalny niż' EmployeeProjection'. Ta sama historia dzieje się dla interfejsu 'DepartmentProjection'. –