После нескольких дней попыток. Единственное решение, которое мы нашли, это добавить @JsonIgnoreProperties({"predecessors"})
и @JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class, property="idHitoAux")
HitoOrdenable.java
@MappedSuperclass
@XmlType(propOrder = {..., "successors", "predecessors", ...})
@XmlAccessorType(XmlAccessType.FIELD)
@JsonIgnoreProperties({ "predecessors" })
@JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class, property="idHitoAux")
Hito.java
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@Audited
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(propOrder = { "idHito", "tipoHito"})
@JsonIgnoreProperties({"idHitoAux", "hibernateLazyInitializer", "handler"})
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXISTING_PROPERTY, visible = true, property = "tipoHito")
@JsonSubTypes({
@JsonSubTypes.Type(name = "hito_obra", value = HitoObra.class),
@JsonSubTypes.Type(name = "hito_proyecto", value = HitoProyecto.class)
})<
С JsonIgnoreProperties мы предотвращаем бесконечный цикл между наследниками и предшественниками, а с @JsonIdentityInfo
это было потому, что, если мы используем "idHito"
вместо "idHitoAux"
(который равен idHito), Hibernate преобразует idHito в ноль. Таким образом, с помощью "idHitoAux"
Hibernate может идентифицировать каждый объект в списке.
PD: После этого решения у нас была проблема с десериализацией abstract class Hito
, поэтому наше решение было добавить @JsonSubTypes
.
Привет!