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 は Value オブジェクトであると考えているため、AnswerOption の識別子は必要ありません。AnswerOption クラスに使用する注釈が不明なため、JPA を使用してこのモデルを永続化する方法を誰かが推奨できますか?

ありがとう。

4

1 に答える 1

3

私は、AnswerOptionクラスをエンティティとしても作成します。

@Entity
class AnswerOption{
   private String option;

   @ManyToOne
   private Question question;
 }

以下のようにオプションを使用するようにクラスのoneToManyマッピングを変更します。QuestionCASCADE

 @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 に答える