JPA实体,循环引用和toString()

时间:2013-08-26 20:10:41

标签: java jpa

通常会有一个实体图,其中关系以两种方式映射,例如

class Home {
  @Id
  private Long id;

  @OneToMany(mappedBy = "home")
  Set<Room> rooms;

  @Override
  public String toString() {
    return "Home [id=" + id + ", rooms=" + rooms + "]";
  }
}

class Room {
  @Id
  private Long id;

  @ManyToOne
  private Home home;

  @Override
  public String toString() {
    return "Room [id=" + id + ", home=" + home + "]";
  }
}

这样说,如果我们使用IDE的自动生成toString方法,我们可能会在toString()方法中无意中导致深度递归,因为Home将打印Rooms,每个Room将依次打印它的Home。

是否有任何优雅的方式(特别是出于调试目的)以清晰的toString方式打印对象的图形,而不必在实现toString()方法时注意避免循环?

1 个答案:

答案 0 :(得分:2)

如何使用Apache Commons Lang执行以下操作

@Override
public String toString() {
    return ToStringBuilder.reflectionToString(this);
}

这将为您提供对象的反身表示。这样你就可以实现一个格式化程序,它可以遍历对象图并完全打印输出,但不必担心管理单独的属性添加/删除。