Java Hibernate - 在Hashmaps中持久化Hashmaps?

时间:2018-04-07 03:00:36

标签: java database hibernate hashmap persistence

背景:我希望用户参加员工筛选测试,其中每个问题都是"配对"另一个问题,但问题措辞不同。

用户类下面的HashMap仅在以下情况下有效:

Map<Question, Answer> answers = new HashMap<>();

但是,我的程序会有两个不同的答案,分别是两个相似的问题。关于如何设置课程的任何建议?试图坚持HashMap的HashMap有意义吗?我应该为MatchingAnswers设一个单独的课吗?

由于

@Entity
public class User {

    @Id
    @GeneratedValue
    int id;    

    @OneToMany(mappedBy = "user")
    @MapKeyJoinColumn(name="QUESTION_ID")
    Map<Map<Question, QuestionMatch>,Answer> answers = new HashMap<>();
}

@Entity
public class Question {

    @Id
    @GeneratedValue
    private int id;

    @NotNull
    @Size(min = 3, message = "Please add a question")
    private String question1;

    public Integer desiredAnswer1;

    private Boolean matchingOpposite;

    @OneToOne //not sure if this is necessary
    QuestionMatch matchingQuestion; 

@Entity
public class Answer {


    @Id
    @GeneratedValue
    private long id;

    private int answer;

    private int matchingAnswer;

    @ManyToOne
    private User user;

    @ManyToOne
    @JoinColumn(name="QUESTION_ID")

    Question question;

@Entity
public class QuestionMatch {

    @Id
    @GeneratedValue
    private int id;

    @NotNull
    @Size(min=3, message = "Please add a question")
    private String questionMatch;


    public int desiredAnswerForQuestionMatch;

1 个答案:

答案 0 :(得分:0)

我建议不要在你的实体类中使用这种复杂的结构。 如果您对类似问题有规范性问题,可以添加

@OneToOne
Question canonical;

您可以在上层为您创建更适合的结构(如服务)。

您还可以创建一个查找类似问题或规范问题的服务方法。因此,在添加新问题之前,请检查是否已存在类似问题。

另一个选择是允许不同的问题有相同的答案。如果您不希望在同一个测试中多次使用相同的答案,只需找到具有不同答案的问题。