Я использую typeorm с гнездом js в моем текущем проекте.
Я использую аннотацию наследования таблиц @TableInheritance
для достижения наследования таблиц.
Код детали, как показано ниже:
@Entity()
@TableInheritance({ column: { type: 'varchar', name: 'type'}})
export class Vehicle { // this is the base clss
@PrimaryGeneratedColumn('uuid')
id: string
@Column()
wheelNumber: number
}
@ChildEntity('BTYPE')
export class Bicycle extends Vehicle { // this is child class 1
@Column()
isRoadBike: boolean
@ManyToOne('Owner', 'bicycles') // it has one-to-many relationship with owner entity
@JoinColumn({ name: 'owner_id'})
owner
}
@ChildEntity('CTYPE')
export class Bicycle extends Vehicle {
@Column()
engineType: string
@ManyToOne('Owner', 'cars') // it has one-to-many relationship with owner entity
@JoinColumn({ name: 'owner_id'})
owner
}
@Entity()
export class Owner {
@PrimaryGeneratedColumn('uuid')
id: string
@OneToMany('Bicycle', 'owner', { cascade: true, eager: true})
bicycles
@OneToMany('Car', 'owner', { cascade: true, eager: true})
cars
}
Я создаю 1 запись владельца, 1 запись велосипеда и 1 запись автомобиля в базе данных, могу связать их вместе.
Я пытаюсь получить данные.
const owner = await this.entityManager.find(Bicycle)
console.log(owner.bicycles)
console.log(owner.cars)
/** result is as below
[Bicycle {
id: 'xxxx-xxxx-xxxx-xxxx',
wheelNumber: 2,
isRoadBike: true
},
Bicycle {
id: 'yyyy-yyyy-yyyy-yyyy',
wheelNumber: 4,
isRoadBike: null
}]
[Car {
id: 'xxxx-xxxx-xxxx-xxxx',
wheelNumber: 2,
engineType: null
},
Car {
id: 'yyyy-yyyy-yyyy-yyyy',
wheelNumber: 4,
engineType: 'some engine'
}]
**/
Он не знает, как сопоставить с отношения один-ко-многим с владельцем.
Кто-нибудь знает, как это исправить?