我正在为在线考试模块制作一个webapp,并且想知道如何改进我当前的设计和抽象。考试是多种选择。
到目前为止,我的数据库中有三个表:
1.exam
2.question
3.answer
这就是我对课程的想法:
public class Exam
{
private int Id;
private String name;
private int timePerQuestionInSeconds;
private int pointsPerQuestion;
private int numberOfQuestions;
private ArrayList<Question> questionList;
}
public class Question
{
private int Id;
private int examID;
private String text;
private String figure;
private String category;
private String name;
private ArrayList<Answer> answers;
}
public class Answer
{
private int id;
private int questionId;
private String text;
private boolean correct;
private String name;
}
因此,为了参加考试,我必须从考试中选择examname,然后从问题中选择examId,然后从答案中选择byquestionid。然后获取这些结果集并将它们映射到对象。
相反,如果我使用JPA来持久化这些实体,是否可以持久化实体的ArrayList?我在课堂考试中是否正确
@OneToMany(targetEntity = Question.class,mappedBy =“examID”)
private ArrayList(Question);
在课堂上我应该有
@ManyToOne
private examID;
设置所需的关系?顺便说一下,我正在使用Java SE,所以我不确定我是否拥有Java EE所拥有的所有支持。
我还需要在某种程度上存储学生的考试成绩。我正在考虑有一个表格分数,其中包含fk到学生ID,我可以通过学生ID查询该表格以返回学生的分数。
答案 0 :(得分:0)
来自JPA的Appart,对于您编写的每个类,如果可能,您应该使用接口而不是具体类来声明bean变量。使用java.util.List而不是java.util.ArrayList。
答案 1 :(得分:0)
关于考试表中的num_question属性,这是必要的吗?从问题表中计算行数是不准确的?
此外,points_per_question是否取决于考试或问题? (我的想法是基于问题)。如果是这样,那么它应该是Question表的一个属性,也可能是time_per_question属性。 (困难或更长的问题允许更多时间?)这都是基于您的原始要求。
否则,它看起来不错。