我在我的实体中搞砸了一些更基本的东西(我添加了级联,而 Postgres 抱怨约束)。它与 QueryRunner 无关。我会在进行更多调查时更新。
我正在尝试使用 QueryRunner 在事务中设置关系,但它不起作用(而列起作用)。
我的代码的近似值如下:
const assignReceiver = async (userId) => {
const queryRunner = this.connection.createQueryRunner();
await queryRunner.connect();
await queryRunner.startTransaction();
const receiverId = findReceiverId(members);
try {
const receiver = await this.userService.findById(receiverId);
await queryRunner.manager.update(User, userId, {
giveTo: receiver,
username: giver.username + ' UPDATED?',
});
}
await queryRunner.commitTransaction();
const giver = await this.userService.findById(userId);
this.logger.debug(`giver: ${JSON.stringify(giver, null, 2)}`);
const giverGiveTo = await giver.giveTo;
this.logger.debug(`giverGiveTo: ${giverGiveTo}`);
}
}
}
输出:
giver: {
usename: 'Bob UPDATED?',
}
giverGiveTo: null
我的实体:
@Entity()
@Unique(['username'])
export class User extends BaseEntity {
@Column()
username: string;
@OneToOne(type => User)
@JoinColumn()
giveTo: User;
@OneToOne(type => User)
receiveFrom: User;
]
username
(普通列)已修改,但 OneToOne
关系 giveTo
未修改。
我最初试图设置 receiveFrom
井,但 TypeORM 会抱怨该列不存在。这让我觉得我错过了一些重要的东西(例如用于更新关系的专用 API)