我有以下表格结构 模型类是:
@Entity
public class Choice {
@Id
@GeneratedValue
@Column(name="CHOICE_ID")
private Long id;
@Column(nullable=false)
private String text;
}
@Entity
public class Question {
@Id
@GeneratedValue
@Column(name="QUESTION_ID")
private Long id;
private String text;
@Column(name="CAT_ID")
private Long catId = 1l;
@Column(nullable=false)
private int difficulty;
@Column(nullable=false)
private int set;
@OneToMany
@JoinColumn(name="QUESTION_ID", referencedColumnName="QUESTION_ID")
private List<Choice> choices;
@OneToOne
@JoinTable(name = "RIGHT_CHOICE", joinColumns = { @JoinColumn(name = "QUESTION_ID", referencedColumnName = "QUESTION_ID") })
private Choice rightChoice;
}
使用注释我希望在问题和选择之间建立一对多的关系。 问题与权利选择之间的一对一关系。如果两种关系都是单向的,那就更好了。
如果有人能提供更好的表格设置会很有帮助。
答案 0 :(得分:2)
我认为您不需要 RightChoice 实体,因为您可以在 Choice 实体中包含一个布尔值。
@Table("CHOICE")
@Entity
class Choice {
<....>
@Column(name = "CORRECT")
private Boolean correct = false;
<....>
private Boolean getCorrect(){
return correct;
}
}
当你构建一个问题时,在添加到问题列表之前,将其中一个选项设置为correct = true;
Choice choice = new Choice();
choice.setCorrect(true);
*<other choices are ommited intentionally>*
question.add(choice);
*<other adds are ommited intentionally>*
此外,您应该在问题实体中使用OneToMany(cascade = CascadeType.PERSIST)
。这意味着持久性将EntityManager操作 PERSIST 传播(级联)到相关实体。