【发布时间】:2020-03-09 11:27:11
【问题描述】:
在 Java 上使用 ORM 已经有一段时间了,目前正在寻找一个选项来防止类似 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 的引用,它启动了引用。
预防它的常用方法是什么?
【问题讨论】:
-
完全没问题。没有什么不好的事情发生:)
-
好吧,我按原样返回这个结果,网页显示了无尽的 json。我没有检查内存脚印。如果这种预期行为如何以传统形式获得结果?
-
看看stackoverflow.com/questions/16577907/…。这可能有助于并防止生成 json 时导致的无限循环。
-
不,这是不同的事情。无论如何,感谢您的贡献!
-
如果您使用jackson进行序列化,请考虑使用
@JsonManagedReference、@JsonBackReferencebaeldung.com/…