mmj*_*ers 15 java json hibernate jpa jackson
我正在使用Jackson将我的JPA模型序列化为JSON.
我有以下课程:
import com.fasterxml.jackson.annotation.*;
import javax.persistence.*;
import java.util.Set;
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class)
@Entity
public class Parent {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@JsonManagedReference
@OneToMany(mappedBy = "parent", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private Set<Child> children;
//Getters and setters
}
Run Code Online (Sandbox Code Playgroud)
和
import com.fasterxml.jackson.annotation.*;
import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonIdentityInfo(generator = ObjectIdGenerators.IntSequenceGenerator.class)
@Entity
public class Child {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@JsonBackReference
@ManyToOne
@JoinColumn(name = "parentId")
private Parent parent;
//Getters and setters
}
Run Code Online (Sandbox Code Playgroud)
我正在使用POJO映射从模型序列化为JSON.当我序列化一个Parent对象时,我得到以下JSON:
{
"id": 1,
"name": "John Doe",
"children": [
{
"id": 1,
"name": "child1"
},{
"id": 2,
"name": "child2"
}
]
}
Run Code Online (Sandbox Code Playgroud)
但是当我序列化一个Child时,我得到以下JSON:
{
"id": 1,
"name": "child1"
}
Run Code Online (Sandbox Code Playgroud)
缺少对父项的引用.有办法解决这个问题吗?
GSP*_*P59 28
我认为你必须在@JsonIdentityInfo和@JsonBackReference/@JsonManagedReference之间进行选择.
我会在你的实体上使用:@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class,property ="id"),删除@JsonBackReference/@JsonManagedReference对.
并在要排除的字段上添加@JsonIgnore.
小智 5
您可以使用JsonManagedReference/JsonBackReference,同时使用JsonIdentityInfo来补充双向关系.
问题类:
// bi-directional one-to-many association to Answer (Question is owner)
@JsonManagedReference
@OneToMany(mappedBy = "question", cascade = CascadeType.ALL)
@JsonIdentityInfo(generator = ObjectIdGenerators.IntSequenceGenerator.class, property = "@QuestionAnswers")
private Set<Answer> answers = new HashSet<>();
Run Code Online (Sandbox Code Playgroud)
在回答Class://与问题的双向多对一关联
@JsonBackReference
@ManyToOne
@JoinColumn(name = "questionId", referencedColumnName="id", foreignKey = @ForeignKey(name = "fk_answer_question"))
private Question question;
Run Code Online (Sandbox Code Playgroud)
如果您需要在子对象中使用父引用,请删除托管/后退引用,这对我来说很好.
| 归档时间: |
|
| 查看次数: |
21928 次 |
| 最近记录: |