0

最近一直在学习Hibernate,遇到了一些困难。我的第一个问题如下:我对以下术语感到非常困惑。

  1. 双向映射
  2. 多对一

因为据我所知,在 rdbms 中,我们首先需要在父表中插入。然后我们可以在子表上插入,所以唯一可能的场景是一对多(先父后子)。那么,多对一是如何工作的呢?其次,关于 Hibernate 的双向映射是什么。具体来说,不同类型的连接注释让我很困惑。我在下面列出了这些注释。

1.@JoinTable(name = "Tbale_Name", joinColumns = { @JoinColumn(name = "Column_Name") }, 
    inverseJoinColumns = { @JoinColumn(name = "Another_ColumnName") })

2.@OneToMany(mappedBy="department")` this mappedby term 

3.@PrimaryKeyJoinColumn

请帮助我理解这些概念。

4

1 回答 1

1

我要说的第一件事是不要从表格的角度思考,而要从对象的角度思考。

您试图用注释表达的是对象之间的关系,让hibernate解决如何持久化数据。您显然可以手动检查 SQL,但使用 ORM 的想法是相应地映射实体之间的关系,并让 ORM 找出生成 SQL 等的复杂性。

值得注意的是,通过将 mappedBy 添加到关系的非拥有(子)端,可以使用 @ManyToOne 映射父 -> 子关系。然后 Hibernate 将确定首先将哪些实体插入数据库。使用 TransactionManager 运行将强制执行多表插入的完整性。Hibernate 还将测试哪些实体需要持久化,例如,如果您将多侧的新对象添加到一侧的现有对象。

此外,值得理解的是,在某些情况下,它并不总是在父 -> 子外键中生成主键的数据库。代码有可能生成标识符,休眠将根据它们进行持久化。

双向映射意味着对象实体相互引用。即您可以从第一个实体中检索第二个实体。双向映射支持一对多或多对多。即 OneToMany = 一个实体上的集合。多对多 = 两个实体上的集合。

JoinTable 告诉 hibernate 数据库中的一个表可以一起映射到其他表。有关更多信息,请参阅JPA“@JoinTable”注释。JoinColumn 告诉 hibernate 使用哪个列来连接两个实体。Hibernate 需要这些来构造 SQL。

于 2013-10-16T21:53:44.287 回答