typescript - 多对多关系未显示在数据库中
问题描述
早上好!
这是我的代码,问题写在代码下面 这是一个多对多关系,用户可以订阅项目
user.entity.ts
@Entity("user")
export class UserEntity {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column({
type: 'varchar',
length: 50,
unique: true,
})
username: string;
@Column('text')
password: string;
@Column('text')
role: string;
@OneToMany(type => SubscriptionEntity, subscriptionEntity => subscriptionEntity.user)
subscription: SubscriptionEntity[];
}
item.entity.ts
@Entity("item")
export class ItemEntity {
constructor() {}
@PrimaryGeneratedColumn() id: number;
@Column('text') name: string;
@Column('text') description: string;
@Column('decimal') price: number;
@Column('text') picture: string;
@OneToMany(type => SubscriptionEntity, subscriptionEntity => subscriptionEntity.item)
subscription: SubscriptionEntity[];
}
subscription.entity.ts
@Entity("subscription")
export class SubscriptionEntity {
@PrimaryColumn() userId: string;
@PrimaryColumn() itemId: number;
@ManyToOne(type => UserEntity, user => user.subscription)
@JoinColumn({name: "userId"})
user: UserEntity;
@ManyToOne(type => ItemEntity, item => item.subscription)
@JoinColumn({name: "itemId"})
item : ItemEntity;
}
问题是我的关系/外键没有显示在我的数据库中:
desc subscription
+--------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+--------------+------+-----+---------+-------+
| userId | varchar(255) | NO | PRI | NULL | |
| itemId | int(11) | NO | PRI | NULL | |
+--------+--------------+------+-----+---------+-------+
我真的看不出那里的问题。我密切关注这个LINK,在完整的底部你可以看到几乎相同的代码。
解决方案
鉴于您想要userId
并itemId
成为他们表的外键(User
和Item
分别),您不应该将它们定义为主键。就SubscriptionEntity
只有一个自动生成的 ID 作为主键。
但是,如果您想对用户强制执行单个项目订阅,则可以使用唯一约束,例如:@Unique(["user", "item"])
推荐阅读
- oracle - 尝试在 Oracle EWPS 中呈现大型 PDF 时出现以下异常
- python - 使用字典替换字符串列表中的值
- pyparsing - 如何摆脱尾随空格
- android - 我可以在 8 月 1 日之后更新我的 Android 应用程序以支持 64 位吗?
- flow-project - 如何在流程中使用变道模型SL2015?
- mysql - 如何修复文件 (Renci.SshNet) 在 Powerhell 中打开 MySQL 连接时找不到错误
- javascript - 如何在 JavaScript 中创建 OpenCV 锐化矩阵?
- javascript - 运行 create-react-app 时在 core-js@2.6.9 安装后脚本失败
- algorithm - 基于另一个列表的排序方式在 Dart 中对列表进行排序
- cordova - 错误:未找到“www/index.html”处的起始页并且错误内部导航被拒绝 -
未设置 url='about:blank'