• 沒有找到結果。

关系映射缺省值

在文檔中 1 实体 (頁 18-27)

1  实体

1.1  实体类的要求

1.1.8  关系映射缺省值

这一节定义用于 OneToOne、OneToMany、ManyToOne 和 ManyToMany 关 系模型注解符的映射缺省值。当使用 XML 配置文件声明关系时,使用相同的映 射缺省值。

1.1.8.1 双向 OneToOne 关系

假定:

实体 A 引用实体 B 的一个实例。

实体 B 引用一个实体 A 的一个实例。

实体 A 作为关系的拥有者。

将使用以下的缺省映射:

实体 A 被映射到名字为 A 的表。

实体 B 被映射到名字为 B 的表。

表 A 有一个指向表 B 的外键。外键的列名格式为:实体 A 中关系字段 的名称_表 B 中主键列的名称。外键列的类型和表 B 主键的类型相同,并且有一 个唯一主键约束。

举例说明:

在上例中:

实体 Employee 引用一个实体 Cubicle 的实例。

实体 Cubicle 引用一个实体 Employee 的实例。

实体 Employee 是关系的拥有者。

将使用以下的缺省映射:

实体 Employee 被映射为名字为 EMPLOYEE 的表。

实体 Cubicle 被映射为名字为 CUBICLE 的表。

表 EMPLOYEE 有 一 个 到 表 CUBICLE 的 外 键 。 外 键 列 名 为 ASSIGNEDCUBICLE_<PK of CUBICLE>,<PK of CUBICLE>是表 CUBICLE 的 主键列名。外键列和 CUBICLE 的主键有相同的类型,且有一个唯一主键约束。

1.1.8.2 双向 ManyToOne/OneToMany 关系

假定:

实体 A 引用一个实体 B 的实例。

实体 B 引用一个实体 A 的集合。

那么,实体 A 必须是关系的拥有者。

将使用以下的缺省映射:

实体 A 映射成表 A。

实体 B 映射成表 B。

表 A 有一个到表 B 的外键。外键名的格式是实体 A 中关系属性的名称_

表 B 的主键名称。外键和表 B 的主键具有相同的类型。

在上例中:

实体 Employee 引用了一个实体 Department 实例。

实体 Department 引用了一个 Employee 的集合。

实体 Employee 是关系的拥有者。

将使用以下的缺省映射:

实体 Employee 映射成表名为 EMPLOYEE 的表。

实体 Department 映射成表明为 DEPARTMENT 的表。

表 EMPLOYEE 有 一 个 指 向 DEPARTMENT 的 外 键 。 外 键 名 为 DEPARTMENT_<PK of DEPARTMENT>。外键和 DEPARTMENT 的主键有相同 的类型。

1.1.8.3 单向单值关系

假定:

实体 A 引用一个实体 B 的实例。

实体 B 没有引用实体 A。

单向关系只有一个拥有者边,在上例中只能是实体 A。

单向单值关系模型可以作为单向 OneToOne 或单向 ManyToOne 关系。

1.1.8.3.1 单向 OneToOne 关系

将应用以下缺省的映射规则:

实体 A 映射成名称为 A 的表。

实体 B 映射成名称为 B 的表。

表 A 有一个指向表 B 的外键。外键名称的格式为:实体 A 的关系字段 名称_表 B 的主键名称。外键和表 B 的主键具有相同的类型和约束条件。

举例如下:

上例中:

实体 Employee 引用一个实体 TravelProfile 的实例。

实体 TravelProfile 没有引用 Employee。

实体 Employee 是关系的拥有者。

将应用以下映射规则:

实体 Employee 映射为名称为 EMPLOYEE 的表。

实体 TravelProfile 映射为名称为 TRAVELPROFILE 的表。

表 EMPLOYEE 有一个指向 TRAVELPROFILE 的外键。外键的列名为 PROFILE_<PK of TRVELPROFILE> , <PK of TRVELPROFILE> 是 标

TARAVELPROFILE 的主键名称。外键和表 TARAVELPROFILE 的主键有相同的 类型和唯一性约束条件。

1.1.8.3.2 单向 ManyToOne 关系

将使用以下缺省的映射规则:

实体 A 映射成表 A。

实体 B 映射成表 B。

表 A 有一个指向表 B 的外键。外键的列名的格式为:实体 A 的关系字段名 称_表 B 的主键名称。外键和表 B 的主键具有相同的类型。

举例如下:

在上例中:

实体 Employee 映射成表 EMPLOYEE。

实体 Address 映射成表 ADDRESS。

表 EMPLOYEE 有 一 个 指 向 表 ADDRESS 的 外 键 。 外 键 列 名 为 ADDRESS_<PK of ADDRESS>,<PK of ADDRESS>是表 ADDRESS 的主键名称。

外键和表 ADDRESS 的主键有相同的类型。

1.1.8.4 双向 ManyToMany 关系

假定:

实体 A 引用一个实体 B 的集合。

实体 B 引用一个实体 A 的集合。

实体 A 是关系的拥有者。

将使用以下映射规则:

实体 A 映射成表 A。

实体 B 映射成表 B。

有一个关联表 A_B(关系拥有者的名称放在前)。关联表有两个外键列。

一个外键指向表 A,这个外键和表 A 的主键具有相同的类型。外键的名称格式 为:实体 B 中指向实体 A 的字段的名称_表 A 的主键名称。另外一个外键指向 表 B,并且和表 B 的主键具有相同的类型。这个外键的名称为:实体 A 中指向 实体 B 的字段的名称_表 B 的主键名称。

举例如下:

在上例中:

实体 Project 引用一个实体 Employee 的集合。

实体 Employee 引用一个实体 Project 的集合。

实体 Project 是关系的拥有者。

将使用下面的映射规则:

实体 Project 映射成表 Project。

实体 Employee 映射成表 EMPLOYEE。

有一个关联表 PROJECT_EMPLOYEE。关联表有两个外键,一个是 PROJECTS_<PK of PROJECT>,一个是 EMPLOYEES_<PK of EMPLOYEE>。

1.1.8.5 单向多值关系

假定:

实体 A 引用一个实体 B 的集合。

实体 B 没有引用实体 A。

单向关系只有一个拥有者边,在这个情况下必须是实体 A。

单向多值关系关系模型可以作为单向 OneToMany 或单向 ManyToMany 关系。

1.1.8.5.1 单向 OneToMany 关系

将使用以下映射规则:

实体 A 映射成表 A。

实体 B 映射成表 B。

有一个关系表 A_B。这个关联表有两个外键列。一个外键指向表 A,这 个外键和表 A 的主键具有相同的类型。外键的名称格式为:实体 B 中指向实体 A 的字段的名称_表 A 的主键名称。另外一个外键指向表 B,并且和表 B 的主键 具有相同的类型。这个外键的名称为:实体 A 中指向实体 B 的字段的名称_表 B 的主键名称。

举例如下:

在上例中:

实体 Employee 引用一个实体 AnnualReview 的集合。

实体 AnnualReview 没有引用 Employee。

有一个关联表 EMPLOYEE_ANNUALREVIEW。这个关联表有两个外键:

一个是 EMPLOYEE_<PK of EMPLOYEE>,一个是 ANNUALREVIEWS_<PK of ANNUALREVIEW>。

1.1.8.5.2 单向 ManyToMany 关系

将使用以下映射规则:

实体 A 映射成表 A。

实体 B 映射成表 B。

有一个关系表 A_B。这个关联表有两个外键列。一个外键指向表 A,这 个外键和表 A 的主键具有相同的类型。外键的名称格式为:实体 B 中指向实体 A 的字段的名称_表 A 的主键名称。另外一个外键指向表 B,并且和表 B 的主键 具有相同的类型。这个外键的名称为:实体 A 中指向实体 B 的字段的名称_表 B 的主键名称。

举例如下:

在上例中:

实体 Employee 引用一个实体 Patent 的集合。

实体 Patent 没有引用实体 Employee。

实体 Employee 是关系的拥有者。

将使用以下映射规则:

实体 Employee 映射成表 EMPLOYEE。

实体 Patent 映射成表 PATENT。

用一个关联表 EMPLOYEE_PATENT。关联表中有两个外键:一个是 EMPLOYEE_<PK of EMPLOYEE>,一个是 PATENTS_<PK of PATENT>。

在文檔中 1 实体 (頁 18-27)