java - Hibernate无限递归和双向关系

标签 java hibernate jackson

我有两个实体。我想要项目和任务之间的双向关系。

  • 一个项目有一个或多个任务
  • 一项任务只与一个项目相关

有我的实体:


ProjectEntity.java

@Entity
@Table(name = "projects")
public class ProjectEntity {
    @Id
    @GeneratedValue
    @Column(name = "pr_id")
    private long id;

    @Column(name = "pr_name", nullable = false)
    private String name;

    @OneToMany(cascade=CascadeType.ALL, mappedBy="project",orphanRemoval=true)
    @JsonBackReference
    private Set<TaskEntity> tasks = new HashSet<TaskEntity>();

   // Getters, constructors, setters

TaskEntity.java

@Entity
@Table(name = "tasks")
public class TaskEntity {
    @Id
    @GeneratedValue
    @Column(name = "ta_id")
    private long id;

    @Column(name = "ta_name")
    private String name;

    @ManyToOne
    @JoinColumn(name="pr_id")
    @JsonManagedReference
    private ProjectEntity project;

    // Getters, constructors, setters

我想要每个 ProjectEntity 中的任务列表,以及每个 TaskEntity 中关联的项目。

在这里,我使用 @JsonManagedReference@JsonBackReference 来停止它生成的无限递归,但是在我的 ProjectEntity 中,我没有没有任务列表(因为 @JsonBackReference)...

你能帮我取回 ProjectEntity 中的任务列表吗?我听说过 @JsonIdentifyInfo,但我还没有成功。

希望我能被理解:)

最佳答案

我知道的解决方案实际上是使用“@JsonIdentityInfo”代替“@JsonBackReference”和“@JsonManagedReference”。 您必须删除“@JsonBackReference”和“@JsonManagedReference”才能使用“@JsonIdentityInfo”。

@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property="id")
@Entity
@Table(name = "projects")
public class ProjectEntity {
    @Id
    @GeneratedValue
    @Column(name = "pr_id")
    private long id;

    @Column(name = "pr_name", nullable = false)
    private String name;

    @OneToMany(cascade=CascadeType.ALL, mappedBy="project",orphanRemoval=true)
    private Set<TaskEntity> tasks = new HashSet<TaskEntity>();
}


@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property="id")
@Entity
@Table(name = "tasks")
public class TaskEntity {
    @Id
    @GeneratedValue
    @Column(name = "ta_id")
    private long id;

    @Column(name = "ta_name")
    private String name;

    @ManyToOne
    @JoinColumn(name="pr_id")
    private ProjectEntity project;
}

关于java - Hibernate无限递归和双向关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31188011/

相关文章:

java - 有没有办法改进这个要求?

java - iText 将大表格嵌套在另一个表格的单元格内

jackson - 性能差异 - Jackson ObjctMapper.writeValue(writer, val) 与 ObjectMapper.writeValueAsString(val)

java - Jackson 子类列表反序列化

java - PaintComponent 无法在 JScrollPane 内的 JPanel 上按预期工作

java - HQL - 通过电子邮件或带点 ('.' 的字符串查询始终返回空集

java - org.hibernate.PropertyNotFoundException : Could not find a getter for id in class model. 联系人

java - EJB+EclipseLink 或 Spring+Hibernate

json - 使用 jackson 的多个 Any-Setters?

java - 如何开始编写代码覆盖工具?