与关系持久实体的问题

时间:2019-11-14 09:50:56

标签: typescript nestjs typeorm

我正在使用nestjstypeormnestjsx/crud创建API端点。

我的用户实体定义如下:

@Entity({
    name: 'users'
})

export class User extends CommonEntity {

    @Column({ length: 104, unique: true })
    email: string;
    .
    .
    .

    @OneToOne(type => Role, role => role.user, { cascade: true, lazy: true })
    @JoinColumn()
    role: Role; //this creates a roleId column in user table
}

和角色实体:

@Entity({
    name: 'roles'
})

export class Role extends CommonEntity {

    @OneToOne(type => User, user => user.role)
    user: User;

    @Column({ length: 52 })
    name: string;

    @Column({ type: 'text' })
    policy: string;

}

如何使用单个请求通过RESTful API创建新用户(具有角色)?

我尝试发布以下内容而没有成功:

  1. 下面给出了重复的记录错误。显然,它正在尝试创建新的角色记录
{
  "email": "string03xyz@gmail.com",
  "role": {
    "id": "1f07f012-9391-4b5f-b6d3-574c58f4e046"
  }
}
  1. roleId被忽略,​​不向数据库添加任何内容
{
  "email": "string03xyz@gmail.com",
  "roleId": "1f07f012-9391-4b5f-b6d3-574c58f4e046"
}

1 个答案:

答案 0 :(得分:1)

总是要声明您具有重复项,因为它是一个OneToOne关系,您需要使用ManyToMany关系,其中ManyToMany关系是唯一的,使用带有用户ID和角色ID的复合ID