首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Hibernate中实现组合主键?

如何在Hibernate中实现组合主键?
EN

Stack Overflow用户
提问于 2018-07-29 02:25:40
回答 1查看 115关注 0票数 1

我有两个主键分别为questionNumber和assessmentId的表。我想使用这两个来将它们组合到两个不同的表中。这有没有可能。我是不是应该添加一些东西来让它工作。或者有其他方法来实现它。或者我应该将问题元数据添加到问题中,并只使用AnswerKey中的组合键

代码语言:javascript
复制
  Question

        @Entity
        @Getter
        @Setter
        public class Question implements Serializable {

            @Id
            @GeneratedValue(strategy = GenerationType.AUTO)
            private int questionId;

            private int questionNumber;

            private String assessmentId;

            private QuestionTypes questionType;

            private String questionText;

            private String questionURL;

            private QuestionStatus questionStatus;

            @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
            @JoinColumn(name = "questionNumber", referencedColumnName = "questionNumber")
            private List<QuestionOption> questionOptions;
           //Constructor
        // Getter and setter
        }

Assessment

@Entity
@JsonIgnoreProperties({"questionList"})
public class Assessment {

    @Id
    private String assessmentId;

    private String assessmentTopic;

    private String assessmentSubTopic;

    private String assessmentLevel;

    private String createdBy;

    private String rating;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "assessmentId", fetch = FetchType.LAZY)
    private List<Question> questionList;

   //Constructor
   //Setter and getter
}


QuestionMetaData



     @Entity
        public class QuestionMetaData {

            @Id
            private QuestionAssessmentKey questionAssessmentKey;

            private String topicName;

            private String subtopicName;

            private QuestionComplexity complexity;

            private String conceptName;
           //Getter and setter
          //Constructor
        }

   AnswerKey



@Entity
public class AnswerKey {

    @Id
    private QuestionAssessmentKey questionAssessmentKey;

    private Character answer;

  //Constructor
// Setter and getter
}


    Key

    @Embeddable
    public class QuestionAssessmentKey implements Serializable {

        private int questionNumber;

        private String assessmentId;
      //Constructor
    //Setter and Getter
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-29 07:58:25

这些是“派生的身份”,所以您的映射应该如下所示:

代码语言:javascript
复制
@Entity
public class Assessment {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private String assessmentId;

    private String assessmentTopic;

    private String assessmentSubTopic;

    private String assessmentLevel;

    private String createdBy;

    private String rating;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "assessment", fetch = FetchType.LAZY)
    private List<Question> questionList;

    // ...
}

@Entity
public class Question implements Serializable {

    @EmbeddedId
    private QuestionAssessmentKey questionAssessmentKey;

    @ManyToOne
    @MapsId("assessmentId") // maps assessmentId attribute of embedded id
    private Assessment assessment;

    private QuestionTypes questionType;

    private String questionText;

    private String questionURL;

    private QuestionStatus questionStatus;

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @JoinColumn(name = "questionNumber", referencedColumnName = "questionNumber")
    private List<QuestionOption> questionOptions;

    // ...
}

@Entity
public class QuestionMetaData {

    @EmbeddedId
    private QuestionAssessmentKey questionAssessmentKey;

    private String topicName;

    private String subtopicName;

    private QuestionComplexity complexity;

    private String conceptName;

    @ManyToOne
    @MapsId("assessmentId") // maps assessmentId attribute of embedded id
    private Assessment assessment;

    // ...
}

@Entity
public class AnswerKey {

    @EmbeddedId
    private QuestionAssessmentKey questionAssessmentKey;

    private Character answer;

    @ManyToOne
    @MapsId("assessmentId") // maps assessmentId attribute of embedded id
    private Assessment assessment;

    // ...
}

@Embeddable
public class QuestionAssessmentKey implements Serializable {

    private String assessmentId;

    private int questionNumber;

    // ...
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51574098

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档