2013-09-05 14 views
0

我有一個2表問題和答案。在問題表2字段id和問題。在答案4字段中,id,QuestionID爲FK to Question,answer和isCorrect。非常容易2關係OneToMany。從List到Json使用Jackson的無限循環

我在這個表上創建了2個實體。 HQL查詢

從問題

後,我收到無限循環,當試圖從列表轉換成JSON。使用傑克遜和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; 
    } 

如何正確創建表或如何正確建立實體?也許還有其他的錯誤。

Thx!

回答

0

This 還添加@JsonManagedReference和@JsonBackReference,同樣的問題驚喜我。

您可以使用@JsonIdentityInfoJackson爲其序列化的每個對象分配ids。如果其中一個對象再次出現,它將使用其先前分配的ID來引用它。

註釋你的類

@Entity 
@JsonIdentityInfo(generator = ObjectIdGenerators.IntSequenceGenerator.class) 
public class Answer { ... } 

有很多ObjectIdGenerators就可以使用。