创建一对一的关系
让我们与另一个类创建一对一的关系。先在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 |
+-------------+--------------+----------------------------+