- 创建一对一的关系
创建一对一的关系
让我们与另一个类创建一对一的关系。先在PhotoMetadata.ts中创建一个新类。此 PhotoMetadata 类应包含 photo 的其他元信息:
import { Entity, Column, PrimaryGeneratedColumn, OneToOne, JoinColumn } from "typeorm";import { Photo } from "./Photo";@Entity()export class PhotoMetadata {@PrimaryGeneratedColumn()id: number;@Column("int")height: number;@Column("int")width: number;@Column()orientation: string;@Column()compressed: boolean;@Column()comment: string;@OneToOne(type => Photo)@JoinColumn()photo: Photo;}
这里我们使用了一个名为@OneToOne的新装饰器,它允许我们在两个实体之间创建一对一的关系。type => Photo是一个函数,返回我们想要与之建立关系的实体的类。由于特定于语言的关系,我们只能使用一个返回类的函数,而不是直接使用该类。同时也可以把它写成()=> Photo,但是type => Photo显得代码更有可读性。type 变量本身不包含任何内容。
我们还添加了一个@JoinColumn装饰器,表明实体键的对应关系。关系可以是单向的或双向的。但是只有一方是拥有者。在关系的所有者方面需要使用@JoinColumn 装饰器。
如果运行该应用程序,你将看到一个新生成的表,它将包含一个带有关系外键的列:
+-------------+--------------+----------------------------+| photo_metadata |+-------------+--------------+----------------------------+| id | int(11) | PRIMARY KEY AUTO_INCREMENT || height | int(11) | || width | int(11) | || comment | varchar(255) | || compressed | boolean | || orientation | varchar(255) | || photoId | int(11) | FOREIGN KEY |+-------------+--------------+----------------------------+
