首页 > 解决方案 > 使用 TypeORM 持久化间接相关的分层数据

问题描述

在查阅了 TypeORM 文档之后,很明显有一些选项可以使用 TypeORM 持久化分层相关的数据。Adjacency-ListNested-SetClosure-Table是解决这些数据结构的典型方法,但似乎它需要单个域类本身内的层次关系。这就是重点,我的情况下的数据有点不同。

我有两个不同的域类:

@Entity()
export class DomainClassA extends BaseEntity {

    @PrimaryGeneratedColumn('uuid')
    id: string;

    @OneToMany(() => [DomainClassB], domainClassB => domainClassB.domainClassA)
    domainClassBs: Promise< DomainClassB[]>;

    // nullable if no domainClassA is structural root
    @OneToOne(() => DomainClassB, { nullable: true })
    domainClassB: DomainClassB;

}

@Entity()
export class DomainClassB extends BaseEntity {

    @PrimaryGeneratedColumn()
    id: string;

    @ManyToOne(() => DomainClassA, domainClassA => domainClassA.domainClassBs)
    domainClassA: DomainClassA;

}

DomainClassA可以有一个列表DomainClassB和 形成一个连贯的实例,但每个都DomainClassB可以有另一个DomainClassA与自己直接相关的,依此类推。

使用 json 表示,该数据如下所示:

[
    {
        id: 'a-1',
        domainClassBs: [
            {
                id: 'b-1'
            },
            {
                id: 'b-2',
                domainClassA: {
                    id: 'b2-a1',
                    domainClassBs: [
                        {
                            id: 'b2-a1-b1'
                        },
                        {
                            id: 'b2-a1-b2'
                        },
                        {
                            id: 'b2-a1-b3',
                            domainClassA: {
                                id: 'b2-a1-b3-a1',
                                domainClassBs: [
                                    {
                                        id: 'another-1'
                                    },
                                    {
                                        id: 'another-2'
                                    }
                                ]
                            }
                        }
                    ]
                }
            },
            {
                id: 'b-3'
            }
        ]
    }
]

我想知道如何使用 SQL 对那些层次相关的数据进行建模。

有什么建议么?

标签: postgresqltypeorm

解决方案


推荐阅读