0

我有2张桌子。一个用于问题,一个用于可能的答案。例如,我正在建模:“你养狗吗?” 是[ ],不是[ ]。

所以我有一组问题和一组可能的答案。我想知道如何在 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 工具,它只负责将您的类和实例映射QuestionAnswerOption定义的表。

您需要的是初始化数据而不是数据结构。因此,您必须以某种初始化方法用可能的实例填充所有实例。QuestionAnswerOptioninitQuestions()

另外,您最好注意这些Questions 是否已经初始化。

于 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 回答