我想存储谁是每个记录的“创建者”和“更新者”,作为对数据库中"User“表的引用。这适用于每个表,包括"User“表本身。这是因为记录可能是由正在注册的用户或其他已存在的用户创建的。
在"User“表上,我有一个DB触发器,它默认将"creator”和"updater“字段填充为与新生成的"id”相同的值,因此我希望在"creator“和"updater”列上使用NOT NULL约束。不幸的是,这将导致以下错误:“检测到循环关系: User -> User.要解决此问题,您需要在此依赖关系结构中的某个位置设置nullable: false。”
有没有办法让我用TypeORM与非空值约束建立循环关系?
发布于 2019-05-27 02:13:55
我真的能让它工作。我将分享我的解决方案,以防有人在寻找答案。
在我尝试通过以下方式自动生成"created_by“列之前:
@ManyToOne(type => User, { onUpdate: 'CASCADE', onDelete: 'CASCADE', nullable: false })
@JoinColumn({ name: 'created_by' })
creator: User
我所要做的就是从那里删除nullable: false,并将它移到一个新的@Column字段中,这样我就可以:
@Column({ nullable: false })
created_by: number
@ManyToOne(type => User, { onUpdate: 'CASCADE', onDelete: 'CASCADE' })
@JoinColumn({ name: 'created_by' })
creator: User
发布于 2019-12-26 18:01:04
我也遇到过类似的问题。我有一个场景,在同一个表中有外键。如果我再多解释一下我的场景。我当时正致力于在应用程序中存储条件语句。
condition#1 a > 4
condition#2 a + b < 0
现在,我想让用户能够在b/w condition#1和condition#2中放置一个逻辑运算符。假设用户选择了b/w中的OR运算符。
(condition#1 OR condition#2)
现在有趣的部分来了,我觉得有必要在同样的FK。如果用户想要在#1和#2之前或之后使用OR运算符添加另一个条件,该怎么办?
condition#3 OR (condition#1 OR condition#2)
因此,为了存储这些条件,我创建了关系。我为这个场景存储了两条记录,第一条记录用于存储(condition#1 OR condition#2),第二条记录用于存储condition#3 OR (condition#1 OR condition#2)
现在来看看我是如何修复它的。以前是这样的:
export class ConditionLogicalOperator {
@PrimaryGeneratedColumn({
type: "int",
name: "ConditionLogicalOperatorID"
})
ConditionLogicalOperatorID: number;
@Column("int", {
nullable: false,
name: "LogicalOperatorID"
})
LogicalOperatorID: number;
@ManyToOne(() => ConditionLogicalOperator, (ConditionLogicalOperator: ConditionLogicalOperator) => ConditionLogicalOperator.conditionLogicalOperators)
@JoinColumn({ name: 'ConditionID1' })
conditionLogicalOperator1: ConditionLogicalOperator | null;
@ManyToOne(() => ConditionLogicalOperator, (ConditionLogicalOperator: ConditionLogicalOperator) => ConditionLogicalOperator.conditionLogicalOperators2)
@JoinColumn({ name: 'ConditionID2' })
conditionLogicalOperator2: ConditionLogicalOperator | null;
....
....
}
诀窍是在Relationship中添加一个空对象{}。请注意每个属性中@ManyToOne行末尾的{}。这对我很管用。
export class ConditionLogicalOperator {
@PrimaryGeneratedColumn({
type: "int",
name: "ConditionLogicalOperatorID"
})
ConditionLogicalOperatorID: number;
@Column("int", {
nullable: false,
name: "LogicalOperatorID"
})
LogicalOperatorID: number;
@ManyToOne(() => ConditionLogicalOperator, (ConditionLogicalOperator: ConditionLogicalOperator) => ConditionLogicalOperator.conditionLogicalOperators, { })
@JoinColumn({ name: 'ConditionID1' })
conditionLogicalOperator1: ConditionLogicalOperator | null;
@ManyToOne(() => ConditionLogicalOperator, (ConditionLogicalOperator: ConditionLogicalOperator) => ConditionLogicalOperator.conditionLogicalOperators2, { })
@JoinColumn({ name: 'ConditionID2' })
conditionLogicalOperator2: ConditionLogicalOperator | null;
....
....
}
https://stackoverflow.com/questions/56316042
复制相似问题