我有2个表问答。在问题表2中的字段id和问题。在答案4字段中,id,QuestionID为FK to Question,answer和isCorrect。很容易2关系OneToMany。
我在这个表上创建了2个实体。在HQL查询之后
来自问题
我尝试从List转换为Json时收到无限循环。使用jackson并注释@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;
}
如何正确创建表或如何正确创建实体?也许还有其他一些错误。
THX!
答案 0 :(得分:0)
这个还添加@JsonManagedReference和@JsonBackReference,同样的问题让我感到惊讶。
您可以使用@JsonIdentityInfo
让Jackson
为其序列化的每个对象分配ID。如果其中一个对象再次出现,它将使用其先前分配的ID来代替它。
为您的课程添加注释
@Entity
@JsonIdentityInfo(generator = ObjectIdGenerators.IntSequenceGenerator.class)
public class Answer { ... }
您可以使用许多ObjectIdGenerators
。