0

私は2つのテーブルを持っています。1つは質問用で、もう1つは可能な回答用です。たとえば、私はモデリングしています:「あなたは犬を飼っていますか?」はい・いいえ[ ]。

だから私は一連の質問と一連の可能な答えを持っています。これをJPAでどのように表現するかを知りたい(これは回答を取得することではなく、質問を表示して選択ボックスに入力することであることに注意してください)。

これまでのところ:

@Entity(name="QUESTIONS")
public class Question {

  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  private long id;

  private int order;
  private String questionTitle;
  private String questionText;
  private Set<AnswerOption> possibleAnswers;
  ....
}

それはprivate Set<AnswerOption> possibleAnswers;私が問題を抱えている部分です。可能な範囲の回答を事前に入力するにはどうすればよいですか?

上でモデル化された方法は、回答を格納するためのSet変数を提供します。

私はこれを間違った方法で考えていますか?コードを使用してデータベースにデータを入力し、同じAnswerOptionオブジェクトを異なるQuestionオブジェクトに割り当てる必要がありますか?

助けてくれてありがとう。アダム

4

2 に答える 2

1

Hibernateは本質的にORMツールであるため、定義されたテーブルへのクラスとインスタンスQuestionのマッピングを処理するだけです。AnswerOption

必要なのは、データ構造ではなく、データ初期化することです。したがって、ある種の初期化メソッドで、すべてのインスタンスに可能なインスタンスを設定する必要があります。QuestionAnswerOptioninitQuestions()

Questionまた、これらがすでに初期化されているかどうかにも注意してください。

于 2012-05-23T12:05:28.007 に答える
0

JPAでその関係をマッピングする前に、まずデータベースのリレーショナルモデリングの観点からこれを確認する必要があります。まず、データベースレベルで質問と回答がどのようにリンクされるかを定義する必要があります。外部キーまたは関連テーブルを使用していると思います。このようなもの:

CREATE TABLE questions (
    id INT NOT NULL PRIMARY KEY,
    text VARCHAR(255)
);

CREATE TABLE answers (
    id INT NOT NULL PRIMARY KEY,
    text VARCHAR(255)
);

CREATE TABLE question_answers (
    id INT NOT NULL PRIMARY KEY,
    question_id INT NOT NULL,
    answer_id INT NOT NULL,
    KEY k_question_id (question_id),
    KEY k_answer_id (answer_id),
    CONSTRAINT fk_question_answers_question_id FOREIGN KEY (question_id)
        REFERENCES questions(id),
    CONSTRAINT fk_question_answers_answer_id FOREIGN KEY (answer_id)
        REFERENCES answers(id)
);

これにより、質問と回答の関係が関連付けテーブルとして定義され、JPAで次のようにマップできます。

@Entity(name="QUESTIONS")
public class Question {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    private int order;
    private String questionTitle;
    private String questionText;

    @JoinTable(name = "question_answers", joinColumns = { @JoinColumn(name = "question_id", unique = true) }, inverseJoinColumns = { @JoinColumn(name = "answer_id") })
    private Set<AnswerOption> possibleAnswers;
}

もちろん、(関連付けテーブルではなく)外部キーを使用するための注釈は異なります。そのルートに移動したい場合は、コメントを残して、例を作成します。これはあなたが始めるのに十分なはずです。

于 2012-05-23T13:32:24.083 に答える