javascript - 为什么我没有实体的参考 ID?
问题描述
我在 TypeORM 中有两个带有One To One
连接的简单实体。如果我提出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 时,什么也没发生。
解决方案
您cascade: true
在 OneToOne 装饰器中指定,这意味着当您使用给定人员保存用户时,该人也将被保存。加载用户时,需要指定人员的数据需要加入。否则person实体会被持久化,获取用户时不会被加载。在您的情况下,这可以通过将 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();
推荐阅读
- java - 如何在 BeforeStep 黄瓜步骤定义中使用 Autowired
- visual-studio-code - 我可以在 VS Code 中设置“文件 > 退出”键盘快捷键吗?
- sql - 在 teradata 中仅使用选择查询来迭代数组
- c# - 多线程:等待线程完成,以便我可以重试死锁
- sql-server - 我正在尝试使用带有光标的存储过程或函数来减少重复的 SQL“代码”,我正在寻找建议/帮助
- docker - 在 gitlab shell 执行程序中运行 docker 时权限被拒绝
- macos - webGL macOS 上的 firefox webm 有时 yuv 有时 rgb
- c# - 如何使用 azure 函数使用托管标识连接 Azure SQL DW
- javascript - 如何使用 cookie 使弹出窗口消失?
- excel - 如何根据工作表名称将工作簿拆分为单独的文件?