Я создал объект «документ»:
например,
@Entity()
export class Document {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@Column()
path: string;
...
}
Несколько документов могут быть связаны с различными типами объектов: post, userProfile и т. Д.
inНапример, у объекта post есть несколько полей, которые все определяют отношения документа.
@OneToOne(type => DocumentEntity)
@JoinColumn({ name: 'default_document' })
defaultDocument: DocumentEntity;
@OneToOne(type => DocumentEntity)
@JoinColumn({ name: 'featured_document' })
featuredDocument: DocumentEntity;
@OneToMany(type => DocumentEntity, document => document.post)
@JoinColumn({ name: 'other_documents' })
otherDocs: DocumentEntity[];
Мне неясно, как сделать отношения документа двунаправленными.Я надеялся иметь одно поле в документе, например:
@ManyToOne(type => abstractEntity, entity => entity.document)
parentEntity: abstractEntity;
Таким образом, если я запрашиваю сущности документа для их родительских отношений, у меня будет такой результат:
documents: [
{
id: 1,
name: 'document 1',
path: 'https://image.hosted.service/1.jpg',
parentEntityId: 23
},
{
id: 2
name: 'document 2',
path: 'https://image.hosted.service/2.jpg'
parentEntityId: 27
}
]
Но Typeorm, кажется, хочет, чтобы я определил точное поле соответствия для каждого родительского поля отношения в documentEntity, например:
@Entity()
export class Document {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@Column()
path: string;
...
@OneToOne(type => PostEntity, post => post.defaultDocument)
postEntityDefaultDoc: PostEntity;
@OneToOne(type => PostEntity, post => post.featuredDocument)
postEntityFeaturedDoc: PostEntity;
@ManyToOne(type => PostEntity, post => post.otherDocs)
otherDocs: PostEntity[];
}
Для простоты в этом примере не существует отношений M: N: документ можетиметь не более одного родителя.
Неправильно, что мне придется определять новое поле в сущности документа для каждого возможного случая, когда поле родительской сущности ссылается на документ.Запрос к документу не вернет список с одним полем, определяющим родительский объект, вместо этого мне придется проанализировать / агрегировать произвольное количество полей.
Я не могу найти какие-либо учебные пособия / примеры, в которыходна сущность имеет много полей, каждое из которых ссылается на одну и ту же другую сущность, что заставляет меня думать, что мой базовый подход несовершенен.