Typeorm 无法创建表之间的关系

Typeorm cannot create relations between tables

出现错误“无法读取未定义的属性(读取 'joinColumns')” 如何实现:用户只能分配一个对资源有权限的角色?

之前用过sequilize,typeorm我是newbee

user_roles table 实体:

@Entity({ name: 'user_roles' })
export class UserRoleEnitity extends DateAudit implements IUserRole {
    @Column('varchar')
    name: string;

    @Column('varchar', {
        nullable: true,
    })
    description?: string;

    @Column('boolean', {
        name: 'is_active',
        default: false
    })
    isActive?: boolean; 

    @OneToMany(() => RolePermissionsEnitity, permission => permission.id)
    permissions: IUserRolePermission[];
}

和用户实体:

@Entity({ name: 'users' })
export class UserEnitity extends DateAudit implements IUser {
    @JoinColumn({ name: 'role_id' }) 
    roleId: string;

    @OneToMany(() => UserRoleEnitity, role => role.id)
    role: UserRoleEnitity;
  
    @Column('varchar', {
        unique: true,
    })
    username: string;
  
    @Column('varchar')
    password: string;

    @Column('varchar', {
        nullable: true,
    })
    email?: string;

    @Column('varchar', {
        name: 'mobile_number',
        nullable: true,
    })
    modileNumber?: string;

    @Column('varchar', {
        nullable: true,
    })
    name?: string;

    @Column('varchar', {
        nullable: true
    })
    position?: string;

    @Column({
        name: 'is_verified',
        default: true
    })
    isVerified?: boolean;

    @Column('timestamp', {
        name: 'password_modified_at',
        default: new Date()
    })
    passwordModifiedAt?: Date;
}

和role_permissions

@Entity({ name: 'user_role_permissions' })
export class RolePermissionsEnitity extends DateAudit implements IUserRolePermission {
    @JoinColumn({ name: 'role_id' }) 
    roleId: string;

    @ManyToOne(() => UserRoleEnitity)
    role: IUserRole;

    @Column({
        type: 'enum',
        enum: Actions,
        default: Actions.READ
    })
    action: Actions;

    @JoinColumn({ name: 'resource_id' }) 
    resourceId: string;

    @ManyToOne(() => ResourceEntity, resource => resource.id)
    resource: IResource;
}

当我这样查询存储库时:

const userEntity = await this._userRepository.findOne({
            where: {
                username,
            },
            relations: ['role']
});

您的父实体不应引用 ID,您应该与定义您的用户实体的字段有关系。 像这样:

用户角色实体

@OneToMany(() => RolePermissionsEnitity, permission => permission.role)
permissions: IUserRolePermission[];

用户实体

@OneToMany(() => UserRoleEnitity, role => role.id)
role: UserRoleEnitity;

您不需要在 ManyToOne 和 OneToMany 关系中使用 JoinColumn()。

您可以在此处找到更多信息:

TypeORM Relations Documentation