我有两张桌子。一个用于问题,一个用于可能的答案。例如,我正在建模: “你有一只狗吗?”是[],否[]。
所以我有一系列问题和一组可能的答案。我想知道如何在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对象吗?
感谢您的帮助。 亚当
答案 0 :(得分:1)
由于Hibernate本质上是一个ORM工具,它只需要将Question
和AnswerOption
类和实例映射到已定义的表。
您需要的是初始化数据,而不是数据结构。因此,您必须在某种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;
}
使用外键(而不是关联表)的注释当然会有所不同,如果你想要去那条路线留下评论,我会举起一个例子。这应该足以让你入门。