2012-11-07 29 views
11

Tôi đã thừa kế một ứng dụng ngủ đông và tôi đã gặp sự cố. Dường như mã không lưu đứa trẻ trong mối quan hệ một-nhiều. Đó là hai chiều, nhưng khi lưu đối tượng cha mẹ, nó dường như không cứu đứa trẻ.Làm thế nào để ngủ đông lưu chú thích một đến nhiều/nhiều người-một? (Trẻ em không tiết kiệm)

Lớp câu hỏi là phụ huynh trong trường hợp này.

// Question.java 
@Entity 
@SequenceGenerator(name = "question_sequence", sequenceName = "seq_question", allocationSize = 1000) 
@Table(name = "question") 
public class Question { 
    protected Long questionId; 
    protected Set<AnswerValue> answerValues; 

    public TurkQuestion(){} 

    public TurkQuestion(Long questionId){ 
     this.questionId = questionId; 
    } 

    @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "question_sequence") 
    @Column(name = "question_id") 
    public Long getQuestionId(){ 
     return questionId; 
    } 

    @OneToMany(fetch = FetchType.EAGER) 
    @JoinColumn(name = "question_id",referencedColumnName="question_id") 
    public Set<AnswerValue> getAnswerValues(){ 
     return answerValues; 
    } 

    public void setQuestionId(Long questionId){ 
     this.questionId = questionId; 
    } 

    public void setAnswerValues(Set<AnswerValue> answerValues){ 
     this.answerValues = answerValues; 
    } 
} 

Trả lờiGiá là lớp con.

// AnswerValue.java 
@Entity 
@SequenceGenerator(name = "answer_value_sequence", sequenceName = "seq_answer_value", allocationSize = 1) 
@Table(name = "answer_value") 
public class AnswerValue { 
    protected Long answerValueId; 
    protected Question question; 
    protected String answerValue; 

    public AnswerValue(){} 

    public AnswerValue(Long answerValueId, Long questionId, String answerValue){ 
     this.answerValueId = answerValueId; 
     this.question = new Question(questionId); 
     this.answerValue = answerValue; 
    } 

    @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "answer_value_sequence") 
    @Column(name = "answer_value_id") 
    public Long getAnswerValueId(){ 
     return answerValueId; 
    } 

    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "question_id", nullable = false) 
    public Question getQuestion(){ 
     return question; 
    } 

    @Column(name = "answer_value") 
    public String getAnswerValue(){ 
     return answerValue; 
    } 

    public void setAnswerValueId(Long answerValueId){ 
     this.answerValueId = answerValueId; 
    } 

    public void setQuestion(Question question){ 
     this.question = question; 
    } 

    public void setAnswerValue(){ 
     this.answerValue = answerValue; 
    } 
} 

Và DAO:

// QuestionDao.java 
public class QuestionDao { 
    public void saveOrUpdateAll(List<Question> list){ 
     getHibernateTemplate().saveOrUpdateAll(list); 
    } 
} 

Dường như khi tôi gọi saveOrUpdateAll, Câu hỏi được lưu, nhưng AnswerValue đó là con của đối tượng Câu hỏi thì không.

Mọi đề xuất?

Trả lời

4

Đối oneToMany mối quan hệ, xin vui lòng xác định chú thích cascade lập bản đồ như:

Cascade={CascadeType.ALL} 

hoặc

 Cascade={ CascadeType.ALL, CascadeType.DELETE_ORPHAN } 

Trong bản đồ của bạn:

@ManyToOne(fetch = FetchType.EAGER, 
       cascade = { CascadeType.ALL, CascadeType.DELETE_ORPHAN }) 
    @JoinColumn(name = "question_id",referencedColumnName="question_id") 
    public Set<AnswerValue> getAnswerValues(){ 
     return answerValues; 
    } 
2

Nếu bạn có một mối quan hệ một-nhiều giữa câu hỏi và trả lời tổ chức, thì tại sao bạn đang sử dụng:

@ManyToOne(fetch = FetchType.EAGER) 
@JoinColumn(name = "question_id",referencedColumnName="question_id") 
public Set<AnswerValue> getAnswerValues(){ 
    return answerValues; 
} 

Tôi nghĩ rằng bạn nên sử dụng này để thay thế:

@OneToMany(fetch = FetchType.EAGER) 
@JoinColumn(name = "question_id",referencedColumnName="question_id") 
public Set<AnswerValue> getAnswerValues(){ 
    return answerValues; 
} 
Các vấn đề liên quan