Java 如何改进这种模式/抽象?

Java 如何改进这种模式/抽象?,java,hibernate,jpa,schema,persistence,Java,Hibernate,Jpa,Schema,Persistence,我正在为在线考试模块制作一个webapp,我想知道如何改进我目前的设计和抽象。考试是多项选择题 到目前为止,我的数据库中有三个表: 1.考试 考试id(初级,汽车公司) 考试名称-示例:“物理”等 数量问题 每个问题的时间 每个问题的分数 2.问题 问题id-主键,auto_公司 检查id-FK引用检查下的检查id,在更新和删除时-级联 问题文本-实际问题本身 问题\图-如果问题带有 图片(例如:graph.jpg)。可以为空 问题(u)类别 问题\名称-唯一,varchar,用于识别问题

我正在为在线考试模块制作一个webapp,我想知道如何改进我目前的设计和抽象。考试是多项选择题

到目前为止,我的数据库中有三个表:

1.考试

  • 考试id(初级,汽车公司)
  • 考试名称-示例:“物理”等
  • 数量问题
  • 每个问题的时间
  • 每个问题的分数
2.问题

  • 问题id-主键,auto_公司
  • 检查id-FK引用检查下的检查id,在更新和删除时-级联
  • 问题文本-实际问题本身
  • 问题\图-如果问题带有 图片(例如:graph.jpg)。可以为空
  • 问题(u)类别
  • 问题\名称-唯一,varchar,用于识别问题的内容(我计划使用此字段,因此我有一个参考来添加答案选项,但感觉没有必要)
3.答案

  • 答案id-PK,汽车公司
  • 问题id-引用问题id的外键。更新/删除时级联
  • 答覆全文
  • answer_correct-微小的整数表示答案是否正确
  • 答案名称-唯一,varchar,答案的引用,与问题名称相同
这就是我对课程的想法:

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;
}
公开课考试
{
私有int-Id;
私有字符串名称;
私人时间间隔;
私人int点问题;
私人问题;
私人ArrayList问题列表;
}
公开课问题
{
私有int-Id;
私立国际考试中心;
私有字符串文本;
私有字符串数字;
私有字符串类别;
私有字符串名称;
私人ArrayList回答;
}
公开课答案
{
私有int-id;
私人智力测验;
私有字符串文本;
私有布尔正确;
私有字符串名称;
}
所以,要参加考试,我必须从考试中选择ByExamName,然后从问题中选择ByExamId,然后从答案中选择ByQuestionID。然后将这些结果集映射到对象

相反,如果我使用JPA来持久化这些实体,是否可以持久化实体的ArrayList?我的课堂考试对吗

@OneToMany(targetEntity=Question.class,mappedBy=“examID”)

私人律师事务所(问题)

在课堂上,我应该问一个问题

@许多酮

私人考试

要设置所需的关系?顺便说一句,我使用的是JavaSE,所以我不确定我是否拥有JavaEE对bean的所有支持


我还需要一些方法来存储学生的考试成绩。我在考虑一个表分数,它有fk到student id,我可以按student id查询该表以返回学生的分数。

来自JPA,对于您编写的每个类,如果可能的话,您应该使用接口而不是具体的类来声明bean变量。使用java.util.List而不是java.util.ArrayList

关于考试表中的num_question属性,这是否必要?计算问题表中的行不是很准确吗

此外,每个问题的分数取决于考试还是问题?(我认为这是基于一个问题)。如果是这样的话,那么它应该是问题表的一个属性,可能还包括时间每问题属性。(困难或更长的问题是否允许更多的时间?)这一切都基于您的原始要求

否则,我觉得没问题