EntityGraph возвращает все от лица - PullRequest
0 голосов
/ 01 апреля 2019

Моя сущность Citizen имеет список WeeklyCare.Каждый WeeklyCare имеет список SubCategoryCare.У меня есть веб-сервис, который использует CrudRepository, чтобы получить всех граждан.Я хочу исключить SubCategoryCare из каждого WeeklyCare в каждом Citizen.Мне сказали, что это можно сделать с EntityGraph, но я не могу заставить его работать.

Вот мои Citizen и EntityGraph:

@Entity
@Table(name = "citizens")
@NamedEntityGraph(
    name = "Citizen.noSubCategoryCare",
    attributeNodes = {
            @NamedAttributeNode("cpr"),
            @NamedAttributeNode("name"),
            @NamedAttributeNode("section"),
            @NamedAttributeNode(value = "weeklyCare", subgraph = "weeklyCareSubgraph"),
    },
    subgraphs = {
            @NamedSubgraph(
                    name = "weeklyCareSubgraph",
                    attributeNodes = {
                            @NamedAttributeNode("id"),
                            @NamedAttributeNode("week"),
                            @NamedAttributeNode("year"),
                            @NamedAttributeNode("practicalCare"),
                            @NamedAttributeNode("personalCare"),
                            @NamedAttributeNode("healthCare"),
                            @NamedAttributeNode("rehabilitation"),
                            @NamedAttributeNode("totalCare"),
                            @NamedAttributeNode("hospitalized"),
                            @NamedAttributeNode("citizenId"),
                    }
            )
    }
)
public class Citizen {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@NaturalId
@Size(max = 10, min = 10, message = "CPR must be exactly 10 characters")
private String cpr;

@NotNull
private String name;

@NotNull
private String section;

@OneToMany(mappedBy = "citizen", cascade = CascadeType.ALL, orphanRemoval = true)
private List<WeeklyCare> weeklyCare;
}

Вот мои CrudRepository:

public interface CitizenRepository extends CrudRepository<Citizen, Long>{

@EntityGraph(value = "Citizen.noSubCategoryCare", type = EntityGraph.EntityGraphType.FETCH)
@Query("SELECT c FROM Citizen c")
List<Citizen> findAllWithoutSubCategoryCare();

@EntityGraph(value = "Citizen.noSubCategoryCare", type = EntityGraph.EntityGraphType.FETCH)
Citizen findByCpr(String cpr);
}

В Controller, который возвращаетграждане, я делаю следующее:

@CrossOrigin(origins = "http://localhost:4200")
@GetMapping(path = "/all") // Map ONLY GET Requests
public @ResponseBody
Iterable<Citizen> getAllCitizens() {
    Citizen c = citizenRepository.findByCpr("someCpr");
    Iterable<Citizen> cc2 = citizenRepository.findAllWithoutSubCategoryCare();
    return cc2;
}

Оба метода возвращают граждан с каждым включенным атрибутом.Что я делаю не так?

...