java使用Jackson从列表到Json无限循环
我有两张桌子的问题和答案。问题表2中的字段id和问题。在答案4字段中,id、QuestionID为FK to Question、Answer和isCorrect。很简单,一个女人
我在这个表上创建了两个实体。HQL查询之后
from Question
当我尝试从列表转换为Json时,我收到无限循环。使用jackson和annotate@JsonIgnore,没有帮助。还添加了@JsonManagedReference和@JsonBackReference,同样的问题
问题:
CREATE TABLE `question` (
`ID` INT(11) NOT NULL AUTO_INCREMENT,
`Question` VARCHAR(200) NOT NULL,
PRIMARY KEY (`ID`)
)
回答
CREATE TABLE `answer` (
`ID` INT(10) NOT NULL AUTO_INCREMENT,
`QuestionID` INT(11) NOT NULL,
`Answer` VARCHAR(50) NOT NULL,
`IsCorrect` TINYINT(1) NULL DEFAULT '0',
PRIMARY KEY (`ID`),
INDEX `FK_Question` (`QuestionID`),
CONSTRAINT `FK_Question` FOREIGN KEY (`QuestionID`) REFERENCES `question` (`ID`)
)
实体
@Entity
@Table(name = "Question")
public class Question implements Serializable{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
private String question;
@JsonManagedReference("question-answers")
@OneToMany(mappedBy="question")
private List<Answer> answers;
.....getters/setters
@Override
public String toString() {
return "Question [id=" + id + ", question=" + question + ", answers="
+ answers + "]";
}
应答实体
@Entity
public class Answer{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
// @GeneratedValue
private int id;
private String answer;
private byte isCorrect;
@ManyToOne(optional = false)
@JoinColumn(name="QuestionID")
@JsonBackReference("question-answer")
private Question question;
.....getters/setters
@Override
public String toString() {
return "Answer {id:" + id + ", answer:" + answer + ", isCorrect:"
+ isCorrect + "}";
}
康罗尔
@RequestMapping("/home")
@JsonIgnore
public @ResponseBody List<Question> home(){
List<Question> qu = questionService.getQuestion();
return qu;
}
如何正确创建表或如何正确创建实体?也许还有别的错误
谢谢
# 1 楼答案
这还添加了@JsonManagedReference和@JsonBackReference,同样的问题让我惊讶
可以使用
@JsonIdentityInfo
让Jackson
为它序列化的每个对象分配ID。如果其中一个对象再次出现,它将使用之前分配的id来引用它为你的课程添加注释
你可以使用很多
ObjectIdGenerators