【问题标题】:Hibernate One-to-One Unidirectional mapping using join tableHibernate 使用连接表的一对一单向映射
【发布时间】:2014-10-11 07:30:15
【问题描述】:

我有以下表结构 模型类是:

选择类

@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;
}

使用注释我想在问题和选择之间建立一对多的关系。 以及问题和正确选择之间的一对一关系。如果这两种关系都是单向的,那就更好了。

如果有人可以提供更好的表格设计,那将会很有帮助。

【问题讨论】:

    标签: java sql hibernate jpa


    【解决方案1】:

    我认为您不需要 RightChoice 实体,因为您的 Choice 实体中可以有一个布尔值。

    @Table("CHOICE")
    @Entity
    class Choice {
    
    <....>
    
    @Column(name = "CORRECT")
    private Boolean correct = false;
    
    <....>
    
    
    private Boolean getCorrect(){
       return correct;
    }
    

    }

    当你将构建一个问题时,在添加到问题列表之前,将选项之一设置为正确 = true;

    Choice choice = new Choice();
    choice.setCorrect(true);
    *<other choices are ommited intentionally>*
    question.add(choice);
    *<other adds are ommited intentionally>*
    

    您还应该在您的Question 实体中使用OneToMany(cascade = CascadeType.PERSIST)。这意味着持久性将传播(级联)EntityManager 操作 PERSIST 到相关实体。

    【讨论】:

      猜你喜欢
      • 2022-01-03
      • 2011-04-24
      • 1970-01-01
      • 2014-11-22
      • 2012-07-12
      • 2020-05-22
      • 1970-01-01
      • 1970-01-01
      • 2021-08-18
      相关资源
      最近更新 更多