I have a user entity:
@Entity()
export class User extends BaseEntity {
@PrimaryGeneratedColumn('uuid')
id: string;
//...
@OneToOne(() => UserActive)
userActive: UserActive;
@AfterInsert()
public async handleAfterInsert() {
const userActive = new UserActive();
userActive.token = randomString();
userActive.user = this;
await getConnection().getRepository(UserActive).save(userActive);
}
}
and UserActive:
export class UserActive extends BaseEntity {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column({
length: 25,
unique: true,
})
token: string;
@OneToOne(() => User)
@JoinColumn()
user: User;
}
I need to insert module token and user id into UserActive. this in line userActive.user = this; is object user (of course with id).
When I insert new user, then TypeORM return error:
Key (userId)=(438dc281-3f03-45b0-bee8-76aecc894d14) is not present in table "user".
Of course when i change to:
userActive.user = '438dc281-3f03-45b0-bee8-76aecc894d14'
then everything works correctly.
I'm using Next.js
EDIT:
I insert new user using:
const connection = getConnection().manager;
const user = new User();
user.name = name;
user.email = email;
user.password = await bcrypt.hash(password, 10);
await connection.save(user);
And I change method handleAfterInsert to:
@Entity()
export class User extends BaseEntity {
@PrimaryGeneratedColumn('uuid')
id: string;
//...
@OneToOne(() => UserActive)
userActive: UserActive;
@AfterInsert()
public async handleAfterInsert() {
const userActive = new UserActive();
userActive.token = randomString();
userActive.user = this;
await getConnection().manager.save(userActive);
}
}
But Nest returns the same error as before.
EDIT 2:
I found this problem: Retrieving ID in @AfterInsert operation
And I try change my method afterInsert to:
@EventSubscriber()
export class UserSubscriber
implements EntitySubscriberInterface<User> {
listenTo() {
return User;
}
async afterInsert(event: InsertEvent<User>) {
const userActive = new UserActive();
userActive.token = randomString();
userActive.user = event.entity;
await getConnection().getRepository(UserActive).save(userActive);
}
}
But now nothing is added to table user active, only is added new user to table user.