【问题标题】:OneToMany & ManyToOne in Hibernate MappingHibernate 映射中的 OneToMany 和 ManyToOne
【发布时间】:2015-02-13 16:21:06
【问题描述】:
public class ClassYear {
    private Set<Examination> examination = new HashSet<Examination>();

    @Id
    @Column(name = "class_id")
    @GeneratedValue(generator = "system-uuid")
    @GenericGenerator(name = "system-uuid", strategy = "uuid")
    @DocumentId
    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    @OneToMany(cascade={CascadeType.ALL},fetch=FetchType.EAGER)
    @JoinColumn(name="class_id")
    public Set<Examination> getExamination() {
        return examination;
    }

    public void setExamination(Set<Examination> examination) {
        this.examination = examination;
    }
}

public class Examination {
    private ClassYear classYear;

    @ManyToOne(cascade={CascadeType.ALL},fetch=FetchType.EAGER)
    @JoinColumn(name="class_id")
    public ClassYear getClassYear() {
        return classYear;
    }

    public void setClassYear(ClassYear classYear) {
        this.classYear = classYear;
    }
}

所以这里,考试表是指ClassYear 表的class_id 列。现在我需要在其他几个表上使用 class_id 列。我该怎么做..?这是一对多的关系概念,但我需要在许多表(比如 HomeWork 表)上使用该 class_id。我在互联网上搜索并找到了一对多和多对一概念的解释,但我无法确切找到如何为多个表执行此操作,其中表中的特定列作为一对多关系。

【问题讨论】:

    标签: mysql hibernate spring-mvc model annotations


    【解决方案1】:

    Examination 实体拥有关系,因此您应该像这样使用mappedBy 映射ClassYear 实体(关系的非拥有方)中的检查(没有连接列):

    @OneToMany(mappedBy="classYear", cascade={CascadeType.ALL})
    public Set<Examination> getExamination() {
        return examination;
    }
    

    我在此示例中删除了 EAGER 提取类型(@OneToMany 的默认值为 LAZY)。我不知道你的用例,但总是急切地获取这样的映射集合并不是最好的主意。

    如果您需要在 HomeWork 等其他实体中引用 ClassYear,请以相同方式进行。 HomeWork 实体将有 @ManyToOne 映射到 ClassYear 并将成为关系的拥有方(就像在 Examination 中一样)并且 ClassYear 的所有作业都可以使用 mappedByClassYear实体。

    还有一个小细节:

    @ManyToOne(cascade={CascadeType.ALL},fetch=FetchType.EAGER)
    

    @ManyToOne 具有 EAGER 默认获取类型,因此您不必手动指定它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多