Чтобы предотвратить бесконечную рекурсию во время сериализации объекта Джексоном, я использую аннотацию @ JsonIdentityInfo.
Эта особенность отличается тем, что содержит как ссылки на родительскую, так и дочернюю сущность того же самого типа.
@JsonIdentityInfo(generator = ObjectIdGenerators.IntSequenceGenerator.class, property = "id")
@Entity
@Table(name = "place")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Place extends Thing implements Serializable {
...
@OneToMany(mappedBy = "containedInPlace", fetch = FetchType.EAGER)
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
private Set<Place> containsPlaces = new HashSet<>();
@ManyToOne
private Place containedInPlace;
}
В результате получается JSON, содержащий все элементы, но некоторые из них преобразуются в уникальный идентификатор, теряя всю свою информацию.
[
{
"id":1003,
"name": "AAA",
"containsPlaces":[
],
"containedInPlace":{
"id":1001,
"name": "BBB",
"containsPlaces":[
1,
{
"id":1004,
"name": "CCC",
"containsPlaces":[
],
"containedInPlace":2
},
{
"id":1005,
"name": "DDD",
"containsPlaces":[
],
"containedInPlace":2
},
{
"id":1006,
"name": "EEE",
"containsPlaces":[
],
"containedInPlace":2
},
{
"id":1007,
"name": "FFF",
"containsPlaces":[
],
"containedInPlace":2
}
],
"containedInPlace":null,
}
},
3,
4,
5,
6
]
Есть ли способ получить полноеобъект вместо идентификатора?Существуют ли другие способы получения полной сериализации родительских и дочерних элементов одного объекта без попадания в бесконечный цикл?