【问题标题】:possible to use eager loading in TypeORM with out defining a relationship?可以在不定义关系的情况下在 TypeORM 中使用预先加载吗?
【发布时间】:2021-05-20 08:10:36
【问题描述】:

我想将 Creator 字段添加到我的所有实体以进行授权。以前我从每个实体到用户实体都有一个 OneToOne 关系,但现在我看到它正在向该表添加约束,最终用户无法创建多个记录。 然后我想到了另一个解决方案,它添加了一个 ManyToOne 关系,它确实是,但问题是你必须为你创建的每个实体添加一个相应的字段到 User 。 像 createdPosts,createdLikes,createdComments 这也不是我需要的。 还有另一个选项可以添加一个数字类型的 Creator 字段和 leftjoin 来让用户每次都被获取,但这增加了太多的维护负担。 那么在 TypeORM 中是否有任何内置的解决方案可以向我的具有用户类型的实体添加字段创建器,并且还可以选择在获取和获取期间预先加载它?

class User extends BaseEntity {
    @PrimaryGeneratedColumn()
    id: number; 
}
class Service extends BaseEntity {
    @PrimaryGeneratedColumn()
    id: number;

    @Column()
    creator: User
 
}

【问题讨论】:

    标签: postgresql relationship nestjs typeorm eager-loading


    【解决方案1】:

    您需要在需要 Creator 的实体上实现多对一,但对于每个实体,您不需要在 User 上实现一对多。 TypeOrm 多对一documentation 专门说“如果你只关心@ManyToOne 关系,你可以定义它而不需要在相关实体上使用@OneToMany。”

    您可以将其设为基类以节省为每个实体键入此内容:

    @Entity()
    export class EntityWithCreator extends BaseEntity {
        @ManyToOne(() => User, { eager: true } )
        @JoinColumn()
        creator: User;
    }
    
    @Entity()
    export class Service extends EntityWithCreator {
        // ...
    }
    

    【讨论】:

      猜你喜欢
      • 2022-07-07
      • 1970-01-01
      • 2021-12-16
      • 1970-01-01
      • 1970-01-01
      • 2018-04-10
      • 2011-01-06
      • 2017-06-18
      • 1970-01-01
      相关资源
      最近更新 更多