休眠递归 Json 响应
hibernate recursive Json response
我正在使用休眠将两个数据库 table 映射到两个 java 对象中。我没有使用 Java 中的属性来表示 table 的外键,而是使用 @OneToMany 和 @ManyToMany hibernate 注释。
问题是,当我想获取对象的 Json 列表时,我得到了递归关系。
这是 "parent" 对象 Cliente.java
@Entity @Table(name="clienti")
@AllArgsConstructor @NoArgsConstructor @Data
public class Cliente {
@Id @Column(name="idcliente") @NotBlank
private String idCliente;
@Column(name="ragionesociale")
private String ragioneSociale;
@Column(name="nominativo") @NotBlank
private String nominativo;
@Column(name="indirizzo")
private String indirizzo;
@Column(name="telefono")
private String telefono;
@Column(name="email")
private String email;
@Column(name="sito")
private String sito;
@Column(name="segnalatore")
private String segnalatore;
@Column(name="attivita")
private String attivita;
@Column(name="interessatoa")
private String interessatoA;
@OneToMany(mappedBy="cliente")
private List<Pratica> pratiche;
@Column(name="registratoda")
private String registratoDa;
@Column(name="data")
private Date data;
@Column(name="note")
private String note;
@PrePersist
private void salvaData(){
data = new Date();
}
}
这个对象有一个列表,它是一个子对象列表。
现在 Pratica.java class:
@Entity @Table(name="pratiche")
@AllArgsConstructor@NoArgsConstructor @lombok.Data
public class Pratica {
@Id @Column(name="idpratica")
private String idPratica;
@Column(name="descrizione")
private String descrizione;
@Column(name="note")
private String note;
@Column(name="data")
private Date data;
@ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name="idcliente", nullable=false)
private Cliente cliente;
@Column(name="registratoDa")
private String registratoDa;
@PrePersist
private void setCampi(){
data = new Date();
idPratica = data.toInstant().toString() + cliente.getIdCliente();
}
}
我已经使用我的 Daos 保存了一些 Cliente 和 Pratica 对象:
//******
clienteDao.save(new Cliente("IDCLIENTE_1", "RAGIONESOCIALE_1", "NOMINATIVO_1", "INDIRIZZO_1", "TELEFONO_1", "EMAIL_1", "SITO_1", "SEGNALATORE_1", "ATTIVITA_1", "INTERESSATOA_1", null, "RGNLSN87H13D761R", null, "NOTE_1"));
clienteDao.save(new Cliente("IDCLIENTE_2", "RAGIONESOCIALE_2", "NOMINATIVO_2", "INDIRIZZO_2", "TELEFONO_2", "EMAIL_2", "SITO_2", "SEGNALATORE_2", "ATTIVITA_2", "INTERESSATOA_2", null, "RGNLSN87H13D761R", null, "NOTE_2"));
clienteDao.save(new Cliente("IDCLIENTE_3", "RAGIONESOCIALE_3", "NOMINATIVO_3", "INDIRIZZO_3", "TELEFONO_3", "EMAIL_3", "SITO_3", "SEGNALATORE_3", "ATTIVITA_3", "INTERESSATOA_3", null, "RGNLSN8UTED761R", null, "NOTE_3"));
//******
praticaDao.save(new Pratica("IDPRATICA_1", "DESCRIZIONE_1", null, "NOTE_1", null, clienteDao.getOne("IDCLIENTE_1"), "RGNDCN8DUYD761R"));
praticaDao.save(new Pratica("IDPRATICA_2", "DESCRIZIONE_2", null, "NOTE_2", null, clienteDao.getOne("IDCLIENTE_1"), "RGNLS32H13D761R"));
praticaDao.save(new Pratica("IDPRATICA_3", "DESCRIZIONE_3", null, "NOTE_3", null, clienteDao.getOne("IDCLIENTE_2"), "RGNLKIU87H13D761R"));
praticaDao.save(new Pratica("IDPRATICA_4", "DESCRIZIONE_4", null, "NOTE_4", null, clienteDao.getOne("IDCLIENTE_2"), "RGNTGH7H13D761R"));
praticaDao.save(new Pratica("IDPRATICA_5", "DESCRIZIONE_5", null, "NOTE_5", null, clienteDao.getOne("IDCLIENTE_3"), "RGNLGTR13D761R"));
praticaDao.save(new Pratica("IDPRATICA_6", "DESCRIZIONE_6", null, "NOTE_6", null, clienteDao.getOne("IDCLIENTE_3"), "RGNLSNHYDFR3D761R"));
但是当我想获取列表或JSON格式的列表时,我得到了递归关系。
[{"idCliente":"IDCLIENTE_1","ragioneSociale":"RAGIONESOCIALE_1","nominativo":"NOMINATIVO_1","indirizzo":"INDIRIZZO_1","telefono":"TELEFONO_1","email":"EMAIL_1","sito":"SITO_1","segnalatore":"SEGNALATORE_1","attivita":"ATTIVITA_1","interessatoA":"INTERESSATOA_1","pratiche":[{"idPratica":"2018-03-21T21:27:05.582ZIDCLIENTE_1","descrizione":"DESCRIZIONE_1","documenti":[],"note":"NOTE_1","data":"2018-03-21T21:27:05.582+0000","cliente":{"idCliente":"IDCLIENTE_1","ragioneSociale":"RAGIONESOCIALE_1","nominativo":"NOMINATIVO_1","indirizzo":"INDIRIZZO_1","telefono":"TELEFONO_1","email":"EMAIL_1","sito":"SITO_1","segnalatore":"SEGNALATORE_1","attivita":"ATTIVITA_1","interessatoA":"INTERESSATOA_1","pratiche":[{"idPratica":"2018-03-21T21:27:05.582ZIDCLIENTE_1","descrizione":"DESCRIZIONE_1","documenti":[],"note":"NOTE_1","data":"2018-03-21T21:27:05.582+0000","cliente":{"idCliente":"IDCLIENTE_1","ragioneSociale":"RAGIONESOCIALE_1","nominativo":"NOMINATIVO_1","indirizzo":"INDIRIZZO_1","telefono":"TELEFONO_1","email":"EMAIL_1","sito":"SITO_1","segnalatore":"SEGNALATORE_1","attivita":"ATTIVITA_1","interessatoA":"INTERESSATOA_1","pratiche":[{"idPratica":"2018-03-21T21:27:05.582ZIDCLIENTE_1","descrizione":"DESCRIZIONE_1","documenti":[],"note":"NOTE_1","data":"2018-03-21T21:27:05.582+0000","cliente":{"idCliente":"IDCLIENTE_1","ragioneSociale":"RAGIONESOCIALE_1","nominativo":"NOMINATIVO_1","indirizzo":"INDIRIZZO_1","telefono":"TELEFONO_1","email":"EMAIL_1","sito":"SITO_1","segnalatore":"SEGNALATORE_1","attivita":"ATTIVITA_1","interessatoA":"INTERESSATOA_1","pratiche":[{"idPratica":"2018-03-21T21:27:05.582ZIDCLIENTE_1","descrizione":"DESCRIZIONE_1","documenti":[],"note":"NOTE_1","data":"2018-03-21T21:27:05.582+0000","cliente":{"idCliente":"IDCLIENTE_1","ragioneSociale":"RAGIONESOCIALE_1","nominativo":"NOMINATIVO_1","indirizzo":"INDIRIZZO_1","telefono":"TELEFONO_1","email":"EMAIL_1","sito":"SITO_1","segnalatore":"SEGNALATORE_1","attivita":"ATTIVITA_1","interessatoA":"INTERESSATOA_1","pratiche":[{"idPratica":"2018-03-21T21:27:05.582ZIDCLIENTE_1","descrizione":"DESCRIZIONE_1","documenti":[],"note":"NOTE_1","data":"2018-03-21T21:27:05.582+0000","cliente":{"idCliente":"IDCLIENTE_1","ragioneSociale":"RAGIONESOCIALE_1","nominativo":"NOMINATIVO_1","indirizzo":"INDIRIZZO_1","telefono":"TELEFONO_1","email":"EMAIL_1","sito":"SITO_1","segnalatore":"SEGNALATORE_1","attivita":"ATTIVITA_1","interessatoA":"INTERESSATOA_1","pratiche":[{"idPratica":"2018-03-...
注释中是否存在错误,或者使用@OneToMany 和@ManyToOne 是否正常,并且有一种方法可以获得最好的 JSON,它更好地代表了 table?
感谢S.Y。 Wang 它是 Infinite Recursion with Jackson JSON 和 Hibernate JPA 问题的副本
所以解决这个递归的方法就是使用两个注解:
@JsonManagedReference
接近父对象中的 @OneToMany 注释和
@JsonBackReference
接近子对象中的 @ManyToOne 注释,以在使用 JacksonLibrary 时阻止递归。
我正在使用休眠将两个数据库 table 映射到两个 java 对象中。我没有使用 Java 中的属性来表示 table 的外键,而是使用 @OneToMany 和 @ManyToMany hibernate 注释。 问题是,当我想获取对象的 Json 列表时,我得到了递归关系。
这是 "parent" 对象 Cliente.java
@Entity @Table(name="clienti")
@AllArgsConstructor @NoArgsConstructor @Data
public class Cliente {
@Id @Column(name="idcliente") @NotBlank
private String idCliente;
@Column(name="ragionesociale")
private String ragioneSociale;
@Column(name="nominativo") @NotBlank
private String nominativo;
@Column(name="indirizzo")
private String indirizzo;
@Column(name="telefono")
private String telefono;
@Column(name="email")
private String email;
@Column(name="sito")
private String sito;
@Column(name="segnalatore")
private String segnalatore;
@Column(name="attivita")
private String attivita;
@Column(name="interessatoa")
private String interessatoA;
@OneToMany(mappedBy="cliente")
private List<Pratica> pratiche;
@Column(name="registratoda")
private String registratoDa;
@Column(name="data")
private Date data;
@Column(name="note")
private String note;
@PrePersist
private void salvaData(){
data = new Date();
}
}
这个对象有一个列表,它是一个子对象列表。 现在 Pratica.java class:
@Entity @Table(name="pratiche")
@AllArgsConstructor@NoArgsConstructor @lombok.Data
public class Pratica {
@Id @Column(name="idpratica")
private String idPratica;
@Column(name="descrizione")
private String descrizione;
@Column(name="note")
private String note;
@Column(name="data")
private Date data;
@ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name="idcliente", nullable=false)
private Cliente cliente;
@Column(name="registratoDa")
private String registratoDa;
@PrePersist
private void setCampi(){
data = new Date();
idPratica = data.toInstant().toString() + cliente.getIdCliente();
}
}
我已经使用我的 Daos 保存了一些 Cliente 和 Pratica 对象:
//******
clienteDao.save(new Cliente("IDCLIENTE_1", "RAGIONESOCIALE_1", "NOMINATIVO_1", "INDIRIZZO_1", "TELEFONO_1", "EMAIL_1", "SITO_1", "SEGNALATORE_1", "ATTIVITA_1", "INTERESSATOA_1", null, "RGNLSN87H13D761R", null, "NOTE_1"));
clienteDao.save(new Cliente("IDCLIENTE_2", "RAGIONESOCIALE_2", "NOMINATIVO_2", "INDIRIZZO_2", "TELEFONO_2", "EMAIL_2", "SITO_2", "SEGNALATORE_2", "ATTIVITA_2", "INTERESSATOA_2", null, "RGNLSN87H13D761R", null, "NOTE_2"));
clienteDao.save(new Cliente("IDCLIENTE_3", "RAGIONESOCIALE_3", "NOMINATIVO_3", "INDIRIZZO_3", "TELEFONO_3", "EMAIL_3", "SITO_3", "SEGNALATORE_3", "ATTIVITA_3", "INTERESSATOA_3", null, "RGNLSN8UTED761R", null, "NOTE_3"));
//******
praticaDao.save(new Pratica("IDPRATICA_1", "DESCRIZIONE_1", null, "NOTE_1", null, clienteDao.getOne("IDCLIENTE_1"), "RGNDCN8DUYD761R"));
praticaDao.save(new Pratica("IDPRATICA_2", "DESCRIZIONE_2", null, "NOTE_2", null, clienteDao.getOne("IDCLIENTE_1"), "RGNLS32H13D761R"));
praticaDao.save(new Pratica("IDPRATICA_3", "DESCRIZIONE_3", null, "NOTE_3", null, clienteDao.getOne("IDCLIENTE_2"), "RGNLKIU87H13D761R"));
praticaDao.save(new Pratica("IDPRATICA_4", "DESCRIZIONE_4", null, "NOTE_4", null, clienteDao.getOne("IDCLIENTE_2"), "RGNTGH7H13D761R"));
praticaDao.save(new Pratica("IDPRATICA_5", "DESCRIZIONE_5", null, "NOTE_5", null, clienteDao.getOne("IDCLIENTE_3"), "RGNLGTR13D761R"));
praticaDao.save(new Pratica("IDPRATICA_6", "DESCRIZIONE_6", null, "NOTE_6", null, clienteDao.getOne("IDCLIENTE_3"), "RGNLSNHYDFR3D761R"));
但是当我想获取列表或JSON格式的列表时,我得到了递归关系。
[{"idCliente":"IDCLIENTE_1","ragioneSociale":"RAGIONESOCIALE_1","nominativo":"NOMINATIVO_1","indirizzo":"INDIRIZZO_1","telefono":"TELEFONO_1","email":"EMAIL_1","sito":"SITO_1","segnalatore":"SEGNALATORE_1","attivita":"ATTIVITA_1","interessatoA":"INTERESSATOA_1","pratiche":[{"idPratica":"2018-03-21T21:27:05.582ZIDCLIENTE_1","descrizione":"DESCRIZIONE_1","documenti":[],"note":"NOTE_1","data":"2018-03-21T21:27:05.582+0000","cliente":{"idCliente":"IDCLIENTE_1","ragioneSociale":"RAGIONESOCIALE_1","nominativo":"NOMINATIVO_1","indirizzo":"INDIRIZZO_1","telefono":"TELEFONO_1","email":"EMAIL_1","sito":"SITO_1","segnalatore":"SEGNALATORE_1","attivita":"ATTIVITA_1","interessatoA":"INTERESSATOA_1","pratiche":[{"idPratica":"2018-03-21T21:27:05.582ZIDCLIENTE_1","descrizione":"DESCRIZIONE_1","documenti":[],"note":"NOTE_1","data":"2018-03-21T21:27:05.582+0000","cliente":{"idCliente":"IDCLIENTE_1","ragioneSociale":"RAGIONESOCIALE_1","nominativo":"NOMINATIVO_1","indirizzo":"INDIRIZZO_1","telefono":"TELEFONO_1","email":"EMAIL_1","sito":"SITO_1","segnalatore":"SEGNALATORE_1","attivita":"ATTIVITA_1","interessatoA":"INTERESSATOA_1","pratiche":[{"idPratica":"2018-03-21T21:27:05.582ZIDCLIENTE_1","descrizione":"DESCRIZIONE_1","documenti":[],"note":"NOTE_1","data":"2018-03-21T21:27:05.582+0000","cliente":{"idCliente":"IDCLIENTE_1","ragioneSociale":"RAGIONESOCIALE_1","nominativo":"NOMINATIVO_1","indirizzo":"INDIRIZZO_1","telefono":"TELEFONO_1","email":"EMAIL_1","sito":"SITO_1","segnalatore":"SEGNALATORE_1","attivita":"ATTIVITA_1","interessatoA":"INTERESSATOA_1","pratiche":[{"idPratica":"2018-03-21T21:27:05.582ZIDCLIENTE_1","descrizione":"DESCRIZIONE_1","documenti":[],"note":"NOTE_1","data":"2018-03-21T21:27:05.582+0000","cliente":{"idCliente":"IDCLIENTE_1","ragioneSociale":"RAGIONESOCIALE_1","nominativo":"NOMINATIVO_1","indirizzo":"INDIRIZZO_1","telefono":"TELEFONO_1","email":"EMAIL_1","sito":"SITO_1","segnalatore":"SEGNALATORE_1","attivita":"ATTIVITA_1","interessatoA":"INTERESSATOA_1","pratiche":[{"idPratica":"2018-03-21T21:27:05.582ZIDCLIENTE_1","descrizione":"DESCRIZIONE_1","documenti":[],"note":"NOTE_1","data":"2018-03-21T21:27:05.582+0000","cliente":{"idCliente":"IDCLIENTE_1","ragioneSociale":"RAGIONESOCIALE_1","nominativo":"NOMINATIVO_1","indirizzo":"INDIRIZZO_1","telefono":"TELEFONO_1","email":"EMAIL_1","sito":"SITO_1","segnalatore":"SEGNALATORE_1","attivita":"ATTIVITA_1","interessatoA":"INTERESSATOA_1","pratiche":[{"idPratica":"2018-03-...
注释中是否存在错误,或者使用@OneToMany 和@ManyToOne 是否正常,并且有一种方法可以获得最好的 JSON,它更好地代表了 table?
感谢S.Y。 Wang 它是 Infinite Recursion with Jackson JSON 和 Hibernate JPA 问题的副本
所以解决这个递归的方法就是使用两个注解:
@JsonManagedReference
接近父对象中的 @OneToMany 注释和
@JsonBackReference
接近子对象中的 @ManyToOne 注释,以在使用 JacksonLibrary 时阻止递归。