1
@Entity
class Question{
    @Id
    private int id;
    private String questionText;

    @OneToMany
    Set<AnswerOption> answerOptions;
}

class AnswerOption{
    private String option;

    @ManyToOne
    private Question question;
}

table-columns:
Question: id, text 
AnswerOption: question_id, option

example:
Question: Which county are you from?
Possible answers: Kent, Essex, Middlesex, Others


Intended api usage:
Question q = new Question("Which county are you from?");
q.addAnswerOption(new AnswerOption("Kent"))
q.addAnswerOption(new AnswerOption("Essex"))
q.addAnswerOption(new AnswerOption("Middlesex"))
q.addAnswerOption(new AnswerOption("Others"))
questionDao.save(q);

我不需要 AnswerOption 的标识符,因为我认为 AnswerOption 是一个 Value 对象。有人可以推荐如何使用 JPA 持久化这个模型,因为我不确定要用于 AnswerOption 类的注释吗?

谢谢。

4

1 回答 1

3

我想说,让你的AnswerOption班级也成为实体。

@Entity
class AnswerOption{
   private String option;

   @ManyToOne
   private Question question;
 }

更改类中的oneToMany映射Question以使用CASCADE如下选项:

 @Entity
 class Question{

    @Id
    private int id;
    private String questionText;

    @OneToMany(cascade = CascadeType.ALL, mappedBy="question")
    Set<AnswerOption> answerOptions;
 }

完成后,保存您的问题对象,如下所示:

 //get your hibernate session
 Session session = ....
 Question q = new Question("Which county are you from?");
 q.addAnswerOption(new AnswerOption("Kent"))
 q.addAnswerOption(new AnswerOption("Essex"))
 q.addAnswerOption(new AnswerOption("Middlesex"))
 q.addAnswerOption(new AnswerOption("Others"))

 //use session to save the Question with AnswerOptionss
 session.save(q);

确保您的addAnswerOption方法Question如下:

 public void addAnswerOption(AnswerOption answerOption){
     //setting the question as parent in answerOption
     answerOption.setQuestion(this).
     this.answerOptions.add(answerOption);
 }
于 2012-10-07T20:07:54.097 回答