Java 外键引用spring引导中的主键
我正在添加MCQ问题、选项和答案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
问题
、选项
和答案
@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;