我有两个实体。我想要项目和任务之间的双向关系。
- 一个项目有一个或多个任务
- 一项任务只与一个项目相关
有我的实体:
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/