У меня есть объекты, которые имеют ссылки на себя, например:
Client
имеет много Properties
Property
имеет много Clients
Возвращение списка Properties
по Client
id вызывает StackOverflowError
, потому что оно продолжает вкладывать Properties
внутри Client
и т. Д.
Как я могу справиться с вложением в большинстве правильный / элегантный способ?
Сервис
public Set<Home> getHouses(Long userId) {
return Utils.iterableToCollection(((HomeRepository) (getRepository())).findAll(), HashSet::new);
}
Контроллер
@GetMapping("/all")
@ResponseBody
public GenericResponse getHouses(@RequestParam("id") Long userId) {
Set<Home> houses = homeService.getHouses(userId);
return new GenericResponse(
"houses fetched successfully",
houses,
HttpStatus.OK
);
}
Дом
public class Home extends AbstractEntity<Long> {
@OneToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "homeAddress_id")
private Address address;
@ManyToMany(mappedBy = "properties", fetch = FetchType.EAGER)
private Set<Client> clients = new HashSet<>();
@Lob
private byte[] apartmentPicture;
}
Клиент
public class Client extends User {
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "CLIENT_HOME",
joinColumns = @JoinColumn(name = "client_id"),
inverseJoinColumns = @JoinColumn(name = "home_id")
)
private Set<Home> properties = new HashSet<>();
}