Прошло некоторое время с тех пор, как мы работали с ORM на Java и в настоящее время искали вариант предотвращения рекурсивных ссылок в отношениях, подобных OneToMany. Вот тривиальный образец.
@Entity
public class InnerEntity extends BaseEntity {
private String name;
@ManyToOne(fetch = FetchType.LAZY)
private OuterEntity host;
public InnerEntity() {
}
public InnerEntity(String name, OuterEntity host) {
this.name = name;
this.host = host;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public OuterEntity getHost() {
return host;
}
public void setHost(OuterEntity host) {
this.host = host;
}
}
@Entity
public class OuterEntity extends BaseEntity {
private String name;
@OneToMany(mappedBy = "host")
private List<InnerEntity> dataset;
public OuterEntity() {
}
public OuterEntity(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<InnerEntity> getDataset() {
return dataset;
}
public void setDataset(List<InnerEntity> dataset) {
this.dataset = dataset;
}
}
public interface OuterTestRepository extends CrudRepository<OuterEntity, Long> {
@Query("SELECT outerEntity FROM OuterEntity outerEntity LEFT JOIN outerEntity.dataset")
Collection<OuterEntity> getAll();
}
@GetMapping("/test")
public ResponseEntity<?> validate() {
return new ResponseEntity<>(repository.getAll(), HttpStatus.OK);
}
В результате запроса OuterEntity host
снова содержит ссылку на InnerEntity
, которая инициирует ссылку.
Каков общий подход к предотвращению этого?