У меня есть такая связь между двумя моделями: Formulario и Secao. На Formulario есть Secao, но он временный. Просто для целей управления кодом. У Secao есть Formulario, но у них есть отношение JPA: @ ManyToOne.
Чтобы создать «Secao», мне нужно создать один «Formulario» до, а затем установить «Formulario» в «Secao» (потому что после будучи сохраненным в базе данных, объект теперь имеет идентификатор).
Основная проблема в том, что теперь у меня есть какой-то "круговой" код. Formulario> Secao> Formulario> Secao (и go на). Как только я сериализую объект, он становится грязным из-за рекурсивности. Использование @JsonBackReference и @JsonManagedReference удалось исправить проблему сериализации, но у меня все еще есть объекты рекурсивные в памяти.
Это ужасная проблема?
(Эта модель / отношение не была создана мной, и я не могу ее переделать).
@Entity(name = "formularios")
@Where(clause = "deletado = 'false'")
public class Formulario extends EntidadeGenerica {
....
@Transient
@JsonManagedReference
private List<Secao> secoes;
@Transient
private List<Dependencia> dependencias;
@Entity(name = "formulario_secoes")
@Where(clause = "deletado = 'false'")
public class Secao extends EntidadeGenerica {
....
@Column(nullable = false)
private Boolean visivelMobile;
@Column(nullable = false, name = "ordem_exibicao")
private Integer ordemExibicao;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "formulario_id")
@JsonBackReference
private Formulario formulario;
public Formulario save(@RequestBody Formulario objeto, HttpServletRequest request) {
try {
formularioRepository.save(objeto);
List<Secao> novasSecoes = objeto.getSecoes();
novasSecoes.stream().map(s -> {
s.setFormulario(objeto);
return secaoRepository.save(s);
});
return objeto;
} catch (Exception e) {
System.out.println(e.getMessage());
return null;
}
}
{
"id": 52,
"dataUltimaAtualizacao": "2020-03-02",
"dataCadastro": "2020-02-28",
"deletado": false,
"cliente": 1,
"modulo": 35,
"nome": "TESTE123",
"entidadeDestino": "teste123",
"bancoDadosDestino": "palotina",
"schemaDestino": "cadastro_tecnico_multifinalitario",
"ordem": null,
"formularioPaiId": null,
"secoes": [
{
"id": null,
"dataUltimaAtualizacao": null,
"dataCadastro": "2020-02-28",
"deletado": false,
"nome": "Dados Morador",
"visivelMobile": true,
"ordemExibicao": 1,
"campos": [
{
"id": null,
"dataUltimaAtualizacao": null,
"dataCadastro": "2020-02-28",
"deletado": false,
"nome": "Nome",
"tipo": "TEXTO",
"ordemExibicao": 1,
"visivelMobile": true,
"abrirFormularioFilho": null,
"inativo": null,
"obrigatorio": true,
"secao": null,
"atributoDestino": "proprietario",
"dependencia": null,
"campoOpcaos": null
}
]
}
],
"dependencias": null
}