[英]Not able to delete records when there are related records in other table with foreign key
收到以下錯誤,嘗試onDelete: 'CASCADE'
on the @ManyToOne
關系
[ExceptionsHandler] update or delete on table "resource" violates foreign key constraint "resource_skill_resource_id_fk" on table "resource_skill"
資源實體
import {
BaseEntity,
Column,
Entity,
Index,
JoinColumn,
JoinTable,
ManyToMany,
ManyToOne,
OneToMany,
OneToOne,
PrimaryColumn,
PrimaryGeneratedColumn,
RelationId
} from 'typeorm';
import { Organization } from './organization';
import { AreaResource } from './area_resource';
import { Client } from './client';
import { EventResource } from './event_resource';
import { LocationResource } from './location_resource';
import { LocationResourceAssignment } from './location_resource_assignment';
import { ResourceSkill } from './resource_skill';
import { TeamResource } from './team_resource';
@Entity('resource', { schema: 'cccalpha1' })
export class Resource {
@Column('text', {
nullable: true,
name: 'first_name'
})
first_name: string | null;
@Column('text', {
nullable: true,
name: 'email'
})
email: string | null;
@Column('text', {
nullable: true,
name: 'background_color'
})
background_color: string | null;
@Column('text', {
nullable: true,
name: 'phone'
})
phone: string | null;
@Column('text', {
nullable: true,
name: 'last_name'
})
last_name: string | null;
@Column('text', {
nullable: true,
name: 'font_color'
})
font_color: string | null;
@Column('text', {
nullable: true,
name: 'full_name'
})
full_name: string | null;
@Column('text', {
nullable: true,
name: 'prefix'
})
prefix: string | null;
@Column('text', {
nullable: true,
name: 'middle_name'
})
middle_name: string | null;
@Column('text', {
nullable: true,
name: 'full_name_last_first'
})
full_name_last_first: string | null;
@Column('boolean', {
nullable: true,
name: 'inactive'
})
inactive: boolean | null;
@Column('text', {
nullable: true,
name: 'suffix'
})
suffix: string | null;
@Column('text', {
nullable: true,
name: 'fax_number'
})
fax_number: string | null;
@Column('boolean', {
nullable: true,
name: 'email_schedule_alert'
})
email_schedule_alert: boolean | null;
@Column('text', {
nullable: true,
name: 'cell_number'
})
cell_number: string | null;
@Column('boolean', {
nullable: true,
name: 'text_schedule_alert'
})
text_schedule_alert: boolean | null;
@Column('text', {
nullable: true,
name: 'email_cell_address'
})
email_cell_address: string | null;
@Column('uuid', {
nullable: false,
primary: true,
default: () => 'uuid_generate_v4()',
name: 'id'
})
id: string;
@ManyToOne(type => Organization, organization => organization.resource, {})
@JoinColumn({name: 'organization_id'})
organization: Organization | null;
@OneToMany(type => AreaResource, area_resource => area_resource.resource, { cascade: true })
area_resource: AreaResource[];
@OneToMany(type => Client, client => client.resource)
client: Client[];
@OneToMany(type => EventResource, event_resource => event_resource.resource)
event_resource: EventResource[];
@OneToMany(type => LocationResource, location_resource => location_resource.resource)
location_resource: LocationResource[];
@OneToMany(type => LocationResourceAssignment, location_resource_assignment => location_resource_assignment.resource)
location_resource_assignment: LocationResourceAssignment[];
@OneToMany(type => ResourceSkill, resource_skill => resource_skill.resource, { eager: true, cascade: true })
resource_skill: ResourceSkill[];
@OneToMany(type => TeamResource, team_resource => team_resource.resource)
team_resource: TeamResource[];
}
資源技能實體
import {
BaseEntity,
Column,
Entity,
Index,
JoinColumn,
JoinTable,
ManyToMany,
ManyToOne,
OneToMany,
OneToOne,
PrimaryColumn,
PrimaryGeneratedColumn,
RelationId
} from 'typeorm';
import { Resource } from './resource';
import { Skill } from './skill';
@Entity('resource_skill', { schema: 'cccalpha1' })
export class ResourceSkill {
@Column('uuid', {
nullable: false,
primary: true,
default: () => 'uuid_generate_v4()',
name: 'id'
})
id: string;
@ManyToOne(type => Resource, resource => resource.resource_skill, { onDelete: 'CASCADE' })
@JoinColumn({ name: 'resource_id' })
resource: Resource | null;
@ManyToOne(type => Skill, skill => skill.resource_skill, { onDelete: 'CASCADE' })
@JoinColumn({ name: 'skill_id' })
skill: Skill | null;
}
我做了三件事,現在刪除效果很好。
Entity
中的聲明方式更改如下,// Old way
@Column('uuid', {
nullable: false,
primary: true,
default: () => 'uuid_generate_v4()',
name: 'id'
})
id: string;
到
// New way
@PrimaryGeneratedColumn('uuid')
id: string;
synchronize
為true
,讓DB與Entity
同步同步 - 同步數據庫架構。 當同步:在連接選項中設置為 true 時,它會調用此方法。 通常,您在應用程序關閉時調用此方法。
PS:可能第一步不是必需的,但我已經走在放下桌子的路上了
同步:true => 神奇
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.