Java 在代码中具有递归性,但在序列化中不具有递归性,这不好吗?

Java 在代码中具有递归性,但在序列化中不具有递归性,这不好吗?,java,jpa,recursion,Java,Jpa,Recursion,我有两个模型之间的关系:Formulario和Secao。 Formulario上有Secao,但只是暂时的。仅用于代码管理目的。 Secao有Formulario,但他们有JPA关系,是@ManyToOne 要创建“Secao”,我必须先创建一个“Formulario”,然后将“Formulario”设置为“Secao”(因为在保存到数据库中之后,对象现在有了一个id) 主要问题是,现在我有了某种“循环”代码。Formulario>Secao>Formulario>Secao(继续)。 我一序

我有两个模型之间的关系:Formulario和Secao。 Formulario上有Secao,但只是暂时的。仅用于代码管理目的。 Secao有Formulario,但他们有JPA关系,是@ManyToOne

要创建“Secao”,我必须先创建一个“Formulario”,然后将“Formulario”设置为“Secao”(因为在保存到数据库中之后,对象现在有了一个id)

主要问题是,现在我有了某种“循环”代码。Formulario>Secao>Formulario>Secao(继续)。 我一序列化对象,它就会因为递归性而变得混乱。使用@JsonBackReference和@JsonManagedReference解决了序列化问题,但我仍然在内存中递归对象

这是个可怕的问题吗

(这个模型/关系不是我做的,我不能重新制作)


请注意,堆栈中的所有secao都指向同一个集合,因此它只获取一次。不用担心,这与创建两个相互引用的对象,然后在debugger视图中尝试通过另一个对象访问一个对象是一样的。
@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
}