问题描述
我有三个表:国家,州,城市。每个表主键列数据类型在实体级别定义为“ uuid”格式。每个都有双向关系,例如(OnetoMany,ManytoOne)。各国陈述和引用的记录超过1000条。所有人都牢牢地固定在sql文件中(见下文),问题出在UUID上,我不知道如何为主键列生成UUID并将此值传递给子表。
使用的技术
中间件-NestJS框架
ORM-TypeOrm框架
数据库-Postgres
国家/地区实体
@Entity({name:"countries"})
export class Countries {
@PrimaryGeneratedColumn("uuid",{
name:"country_id"
})
countryId:string;
@Column({
name:"state_name",nullable:true,unique:true
})
stateName:string;
@OneToMany(type=>States)
states:States[];
}
国家实体
@Entity({name:"states"})
export class States {
@PrimaryGeneratedColumn("uuid",{
name:"state_id"
})
stateId:string;
@Column({
name:"state_name",unique:true
})
stateName:string;
@ManyToOne(type=>Countries)
@JoinColumn({name:"country_id"})
countries:Countries;
@OneToMany(type=>Cities)
cities:Cities[];
}
城市实体
@Entity({name:"cities"})
export class Cities {
@PrimaryGeneratedColumn("uuid",{
name:"city_id"
})
cityId:string;
@Column({
name:"city_name",nullable:false,unique:true
})
cityName:string;
@ManyToOne(type=>States)
@JoinColumn({name:"state_id"})
states:States;
@Column({
name : "state_id"
})
}
SQL文件
INSERT INTO public.erc_countries (country_id,acronym2,country_name,status,created_on) VALUES
(**countryUUID1**,'AF','Afghanistan',1,'**today**'),(**countryUUID2**,'AL','Albania','**today**');
INSERT INTO public.erc_states (state_id,country_id,state_name,created_on) VALUES
(**stateUUID1**,101,'Andaman and Nicobar Islands',**countryUUID1**,(**stateUUID2**,'Andhra Pradesh',**countryUUID2**,'**today**');
INSERT INTO public.erc_cities (city_id,state_id,city_name,created_on) VALUES
(1,'Bombuflat',**stateUUID1**,(2,'Garacharma',**stateUUID2**,'**today**');
我的疑问是,我不知道如何为国家/地区生成UUID,并且应该为州和城市更新相同的id。
假设它是一个序列表示,我将为国家/地区的主键提供1,2值,并且可以为州表提供相同的值。但是我不知道如何在sql文件中生成UUID值并为子表赋予相同的值。
我有一个主意,就像实体关系一样,我们应将默认数据保留为JSON格式。因此,如果我插入父数据,则将使用casecade选项自动保存子数据。但是我不知道这是不是最好的方法。
样本JSON数据
[{
name:"Afghanistan",states:[
{
name:"XYZ",cities : [
{
name:"city2"
}
]
},{
name:"abc",cities : [
{
name:"city2"
}
]
}
]
}]
所以请建议我如何在带有子表或JSON文件生成的UUID值的sql文件中插入主条目?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)