我在 TypeORM 中有两个简单的实体,具有一对一
连接。如果我发出 POST
请求,我会获取表,但引用 ID
仍为 null
。这是为什么?
主要用户实体:
@Entity({ name: "user" })
export class User extends BaseEntity {
@PrimaryGeneratedColumn()
id: number;
@Column({ unique: true })
username: string;
@Column()
password: string;
@OneToOne(
(type) => Personal,
(personal) => personal.user,
{ cascade: true }
)
@JoinColumn()
personalId: personal;
}
个人实体:
@Entity({ name: "personal" })
export class Personal {
@PrimaryGeneratedColumn()
id: number;
@Column({ nullable: true })
familyName: string;
@Column({ nullable: true })
additionalName: string;
@OneToOne(
(type) => User,
(user) => user.personalId
)
user: User;
}
更新:
我尝试设置eager: true
但没有任何改变。
我曾尝试设置 nullable: false
并删除了现有数据库,但当我尝试 POST 时却没有发生任何事情。
最佳答案
您在 OneToOne 装饰器中指定了 cascade: true
,这意味着当您将用户与给定人员一起保存时,该人员也将被保存。
当您加载用户时,您需要指定需要连接人员的数据。否则,当您获得用户时,人员实体将被持久化,不会被加载。在您的情况下,这可以通过将 eager 设置为 true 来完成:
@OneToOne(
(type) => Personal,
(personal) => personal.user,
{ cascade: true, eager: true }
)
@JoinColumn()
personalId: personal;
如果您想使用查询构建器,这将起作用:
const queryBuilder = entityManager.createQueryBuilder(User, 'user');
queryBuilder.leftJoinAndSelect('user.person', 'person');
return queryBuilder.getMany();
关于javascript - 为什么我没有实体的引用 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61387347/