Java 在代码中具有递归性,但在序列化中不具有递归性,这不好吗?
我有两个模型之间的关系:Formulario和Secao。 Formulario上有Secao,但只是暂时的。仅用于代码管理目的。 Secao有Formulario,但他们有JPA关系,是@ManyToOne 要创建“Secao”,我必须先创建一个“Formulario”,然后将“Formulario”设置为“Secao”(因为在保存到数据库中之后,对象现在有了一个id) 主要问题是,现在我有了某种“循环”代码。Formulario>Secao>Formulario>Secao(继续)。 我一序列化对象,它就会因为递归性而变得混乱。使用@JsonBackReference和@JsonManagedReference解决了序列化问题,但我仍然在内存中递归对象 这是个可怕的问题吗 (这个模型/关系不是我做的,我不能重新制作)Java 在代码中具有递归性,但在序列化中不具有递归性,这不好吗?,java,jpa,recursion,Java,Jpa,Recursion,我有两个模型之间的关系:Formulario和Secao。 Formulario上有Secao,但只是暂时的。仅用于代码管理目的。 Secao有Formulario,但他们有JPA关系,是@ManyToOne 要创建“Secao”,我必须先创建一个“Formulario”,然后将“Formulario”设置为“Secao”(因为在保存到数据库中之后,对象现在有了一个id) 主要问题是,现在我有了某种“循环”代码。Formulario>Secao>Formulario>Secao(继续)。 我一序
请注意,堆栈中的所有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
}