JPA查找表值

时间:2012-05-23 11:52:46

标签: java database jpa lookup

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

所以我有一系列问题和一组可能的答案。我想知道如何在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对象吗?

感谢您的帮助。 亚当

2 个答案:

答案 0 :(得分:1)

由于Hibernate本质上是一个ORM工具,它只需要将QuestionAnswerOption类和实例映射到已定义的表。

您需要的是初始化数据,而不是数据结构。因此,您必须在某种Question初始化方法中使用可能的AnswerOption实例填充所有initQuestions()个实例。

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

答案 1 :(得分: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;
}

使用外键(而不是关联表)的注释当然会有所不同,如果你想要去那条路线留下评论,我会举起一个例子。这应该足以让你入门。

相关问题