Roa*_*ach 5 node.js typescript typeorm nestjs
类别.ts
@Entity('categoryenter code here')
export class Category{
@PrimaryGeneratedColumn({ type: 'int' })
id: Category;
@OneToMany(() => Category, category => category.category,{eager:true})
categoryList: Category[];
@ManyToOne(() => Category, (category) => category.categoryList)
category: Category;
}
Run Code Online (Sandbox Code Playgroud)
类别实体在上面(mysql)。我想找到一个包含所有这样子项的类别
await categoryRepo.findOne({
where:{ id: 1 },
relations:['categoryList']
})
Run Code Online (Sandbox Code Playgroud)
但我得到了一个错误Maximum call stack size exceeded
我该怎么办
小智 15
实际上,正如我所见,您正在尝试创建一个树形数据结构。TypeORM 有一些用于此目的的装饰器。这是一个例子:
import {
Entity, BaseEntity, Column,
PrimaryGeneratedColumn, Tree,
TreeParent, TreeChildren
} from 'typeorm';
@Tree('materialized-path')
@Entity({ name: 'Menu' })
export class Category extends BaseEntity {
@PrimaryGeneratedColumn({ type: 'int' })
id: number;
@Column({ type: 'varchar', length: 50 })
text: string;
// Check bellow
@TreeParent()
parent: Category;
@TreeChildren()
children: Category[];
}
Run Code Online (Sandbox Code Playgroud)
装饰器@Tree()用于告诉 TypeORM 每个实例都有自己的自引用。每个项目都应该有一个父项,并且应该有多个子项。祖先和后代可以分别用装饰器@TreeParent()和来设置@TreeChildren()。有关装饰器可用的不同模式的更多详细信息,请查看文档@Tree()。
由于您已经eager加载,每个Category对象都尝试加载其所有符合categoryList. 由于categoryList它也是一个Category实体列表,因此它的所有子项也都在尝试加载categoryList自己的实体。这样一直持续下去,直到堆栈溢出。
从实体中删除eager加载Category:
@Entity('categoryenter code here')
export class Category{
@PrimaryGeneratedColumn({ type: 'int' })
id: Category;
@OneToMany(() => Category, category => category.category)
categoryList: Category[];
@ManyToOne(() => Category, (category) => category.categoryList)
category: Category;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6247 次 |
| 最近记录: |