【发布时间】:2015-07-02 14:57:10
【问题描述】:
我有两个实体。我想要项目和任务之间的双向关系。
- 一个项目有一个或多个任务
- 一项任务仅与一个项目相关联
有我的实体:
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,但我没有设法处理。
希望我可以理解:)
【问题讨论】:
-
这是很棒的迷你指南,其中包含有关您的案例以及如何使用的简单示例 @JsonIdentifyInfo baeldung.com/…
-
我在问我的问题之前已经看过它,它并没有解决我的问题......:/无论如何谢谢
-
在这种情况下,为什么不尝试为 Project.tasks 集合创建一个自定义序列化程序,将其关联 ID 的项目中的每个任务写出(而不仅仅是任务的 ID 列表)?你想在哪里停止序列化?
-
你能详细说明你的想法吗? :)
-
我把想法写在答案上,也许你可以根据自己的需要进行调整:9