Моя сущность 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;
}
Оба метода возвращают граждан с каждым включенным атрибутом.Что я делаю не так?