Java 外键引用spring引导中的主键

Java 外键引用spring引导中的主键,java,database,spring-boot,database-design,java-annotations,Java,Database,Spring Boot,Database Design,Java Annotations,我正在添加MCQ问题、选项和答案 共有三个表问题、选项和答案 下面是我的数据库模式 questionId(问题表)是questionId引用的主键(选项表)是外键 questionId(问题表)是主键,questionId(答案表)是外键 optionId(选项表)是optionId(答案表)是外键所引用的主键 我无法链接主键和外键-请帮助我改进 问题表: @Entity @Table(name = "mcq_question") public class Question { @Id @Ge

我正在添加MCQ问题、选项和答案

  • 共有三个表
    问题
    选项
    答案

  • 下面是我的数据库模式

  • questionId(问题表)是questionId引用的主键(选项表)是外键

  • questionId(问题表)是主键,questionId(答案表)是外键

  • optionId(选项表)是optionId(答案表)是外键所引用的主键

  • 我无法链接主键和外键-请帮助我改进

    问题表:

    @Entity
    @Table(name = "mcq_question")
    public class Question {
    
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @JoinColumn (name = "questionId")
    private Long questionId;
    
    @Column(nullable = false)
    private String question;
    
    @OneToOne(fetch = FetchType.LAZY)
    @JoinTable( name = "Answer", joinColumns = @JoinColumn ( name = "question_id"), inverseJoinColumns = @JoinColumn( name = "option_id"))
    private List <Option> options;
    
    @OneToMany(mappedBy = "questionId", cascade = CascadeType.ALL)
    private Set<Option> option;
    
    public Question() { }
    
    public Long getMcqId() {
        return questionId;
    }
    
    public void setMcqId(Long mcqId) {
        this.questionId = mcqId;
    }
    
    public String getQuestion() {
        return question;
    }
    
    public void setQuestion(String question) {
        this.question = question;
    }
    
    @Override
    public String toString() {
        return "SessionMcqModel{" +
                "mcqId=" + questionId +
                ", question='" + question + '\'' +
                '}';
    }
    
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Question question1 = (Question) o;
        return questionId.equals(question1.questionId) &&
                question.equals(question1.question) &&
                options.equals(question1.options) &&
                option.equals(question1.option);
    }
    
    @Override
    public int hashCode() {
        return Objects.hash(questionId, question, options, option);
    }
    }
    
    错误:


    原因:org.hibernate.AnnotationException:@OneToOne或@ManyToOne on com.bluepi.TrainingProject.model.Question.options引用未知实体:java.util.List

    问题在于
    问题
    选项之间的关系

    @OneToOne(fetch = FetchType.LAZY)
    @JoinTable( name = "Answer", joinColumns = @JoinColumn ( name = "question_id"), inverseJoinColumns = @JoinColumn( name = "option_id"))
    private List <Option> options;
    
    @OneToOne(fetch=FetchType.LAZY)
    @JoinTable(name=“Answer”、joinColumns=@JoinColumn(name=“question\u id”)、inverseJoinColumns=@JoinColumn(name=“option\u id”))
    私人名单选择;
    
    您试图将列表映射到不正确的1-1关系,可能需要使用
    @OneToMany
    注释而不是
    @onetomone

    @OneToOne(fetch = FetchType.LAZY)
    @JoinTable( name = "Answer", joinColumns = @JoinColumn ( name = "question_id"), inverseJoinColumns = @JoinColumn( name = "option_id"))
    private List <Option> options;