У меня есть два объекта: Order
и Item
в OneToMany
отношениях. Элемент принадлежит Ордену, а в Ордене есть набор предметов.Как исключить поля во время сериализации gson
class Order{
@OneToMany(fetch = FetchType.EAGER, mappedBy = "id_order")
Set<Item> items;
}
class Item{
@ManyToOne(targetEntity = Order.class, fetch = FetchType.LAZY)
@JoinColumn(name = "id_order")
Order id_order;
}
Я использую gson
сериализовать Orders
и отправить их на другую машину, но петля создается во время сериализации, как за счет заказов и предметов, имеющих ссылки друг на друга.
Моя цель заключается в том, что при загрузке Item
поле id_order
должно быть либо null
, либо содержать только идентификатор, чтобы избежать распространения. Поддерживает ли hibernate эту функцию? Или я могу исключить поле во время сериализации?
Я уже пытался FetchType.LAZY
на Item
и ловить Item
внутри onLoad() Interceptor
и установив его id_order
в null
. Но это не сработало. Я пытаюсь избежать написания пользовательского адаптера или вручную разбора всех элементов внутри всех ордеров при каждом запросе.
Кажется '@ Expose' является то, что я хочу, однако, это требует' @ excludeFieldsWithoutExposeAnnotation', и что требует от меня, чтобы добавить @Выполните все поля всех объектов (которых много). Есть ли способ автоматического экспонирования всех полей, кроме тех, кого я указываю serialize = false? –
Да, вы можете использовать ExclusionStrategy: https://google-gson.googlecode.com/svn/trunk/gson/docs/javadocs/com/google/gson/ExclusionStrategy.html – kamil
Я прибегал к ExclusionStrategy. Прост в использовании и очень практичен. Спасибо, пожалуйста, добавьте его в ответ для будущих читателей. –