Hibernate spring data jpa от одного до многих двунаправленных рекурсивных циклов - изменение json ignore зависит от родительского объекта

У меня есть отношения «один ко многим». Отель и страна. В стране могут быть отели M, в отеле есть одна страна.

HotelEntity

@Entity
@Table(name = "hotel")
public class HotelEntity {
    ...

    @ManyToOne(cascade= {CascadeType.PERSIST, CascadeType.MERGE,
            CascadeType.DETACH, CascadeType.REFRESH},
    fetch = FetchType.EAGER)
    @JoinColumn(name = "country_id")
    @JsonBackReference
    private CountryEntity country;

    ...
}

HotelEntity

@Entity
@Table(name = "country")
public class CountryEntity {
    ...

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "country")
    @JsonManagedReference
    private List<HotelEntity> hotels;

    ...
}

... символизирует остальную часть класса (как и другое свойство entity, getters, seters, constructor), которые не имеют ничего общего с этой проблемой и затрудняют чтение и понимание

Итак. В моей первой попытке я не использовал JsonManagedReference и JsonBackReference, и я получил бесконечную рекурсию, исключение переполнения стека. И это делает смысл ... kinda ... Я загрузил страну по идентификатору, используя Spring Jpa-интерфейс Spring (встроенный метод), в стране есть список отелей (в отеле есть страна, ... и т. Д.). Эти две аннотации работали. Пока мне не нужно было загружать только отель по Id. Из-за аннотаций страна не была включена в результат. Я понимаю, почему. Но есть ли шанс аннотировать свойство entity, которое не будет включено (или будет включено только один раз), зависит от того, от какого объекта я загружаю объект другой стороны?

Например, я хотел бы загрузить Hotel , С отелем мне нравится сериализовать сущность Country, JsonManagedReference (так что просто основные сведения, такие как Name, путь изображения флага, ...).

Но в другом случае, например, Объект местоположения (такое же отношение, как гостиницы - в одной стране, в стране есть N мест) Я хотел бы загрузить всю страну (включая список отелей, принадлежащих этой стране).

Я не знаю If Я описал это правильно, надеюсь, что вы меня поняли.

Единственное решение, которое я определил собой, было моим собственным руководителем метода интерфейса Объектом местоположения , где я выбираю то, что я действительно хочу. На мой взгляд, это решение кажется немного уродливым, и я хотел бы спросить, есть ли более приятный способ использования Джексона и других аннотаций Hibernate.

0
задан 13 August 2018 в 13:42

0 ответов

Другие вопросы по тегам:

Похожие вопросы: