java - 改进这种模式/抽象的方法?

标签 java hibernate jpa schema persistence

我正在为在线考试模块制作一个网络应用程序,并且想知道如何改进我当前的设计和抽象。考试是多项选择。

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

1.考试

  • exam_id(主要、自动增加)
  • 考试名称 - 例如:“物理”等
  • num_questions
  • 每个问题的时间
  • 每个问题得分

2.问题

  • question_id - 主键,auto_inc
  • exam_id - FK 在考试下引用 exam_id,更新和删除时 - 级联
  • question_text - 实际问题本身
  • question_figure - 文件名(如果问题附有) 图像(例如:graph.jpg)。可以为空
  • question_category
  • question_name - 唯一的,varchar,用来识别问题的东西(我打算使用这个字段,所以我有一个引用来添加答案选项,但感觉没有必要)

3.答案

  • answer_id - PK、auto_inc
  • question_id - 引用问题下的question_id 的外键。更新/删除级联
  • answer_text
  • answer_ Correct - 指示其是否正确答案的小整数
  • answer_name - 唯一、varchar、对答案的引用,与问题的 Question_name 相同

这就是我对类(class)的想法:

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;
}

因此,要参加考试,我必须从考试中 selectbyexamname,然后从问题中 selectbyexamId,然后从答案中 selectbyquestionid。然后获取这些结果集并将它们映射到对象。

相反,如果我使用 JPA 来持久化这些实体,是否可以持久化实体的 ArrayList?我在类考试中正确吗

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

私有(private)ArrayList(问题);

以及我应该在类里面提出的问题

@ManyToOne

私有(private)考试ID;

建立所需的关系?顺便说一句,我正在使用 Java SE,所以我不确定我是否拥有 Java EE 对 beans 的所有支持。

我还需要某种方式来存储学生参加的考试的分数。我正在考虑建立一个包含学生 ID 的分数表,我可以通过学生 ID 查询该表以返回学生的分数。

最佳答案

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

关于java - 改进这种模式/抽象的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17050383/

相关文章:

java - 为 JHipster 创建通用枚举转换器

java - Jsoup无法打开html页面Status=-1

sql - 如何使用 in 谓词检查 spring data jpa @Query 中的 null 集合

java - 从 JPA 2.0 中的实体对象中提取主键?

java - 为来自 XSD 的 OTA 消息创建数据库(持久 OTA 消息)

java - addScalar 是做什么的?

java - 我在@OneToMany hibernate 映射中遇到错误?

java - Hibernate:为两个不同的类映射同一列

java - 将复杂的 while 循环重构为 Java 8 流

java - 不存在类型变量 T 的实例,因此 ID 符合 Comparable<? super T>