[英]TypeORM relation only gives back ids
我是 TypeORM 的新手,所以这可能是一个简单的问题,但我已经创建了两个具有 OneToMany 和 ManyToOne 关系的实体,如下所示:
@Entity('user')
export class UserEntity {
// I left out other fields
@OneToMany(
() => ConfigurationEntity,
(configuration) => configuration.createdBy,
{ nullable: true, cascade: true, eager: true },
)
createdConfigurations?: ConfigurationEntity[];
}
@Entity('configurations')
export class ConfigurationEntity {
@ManyToOne(() => UserEntity, (user) => user.createdConfigurations)
createdBy: UserEntity;
}
创建配置时,我通过将 ConfigurationEntity 添加到 UserEntity 来保存它,然后像这样保存 UserEntity:
async createConfiguration(configurationDto: ConfigurationDto, userEntity: UserEntity) {
let configurationEntity = new ConfigurationEntity();
configurationEntity.createdBy = userEntity;
// here I set some other values of my configurationEntity which I left out
// ....
if (!userEntity.createdConfigurations) {
userEntity.createdConfigurations = [];
}
userEntity.createdConfigurations.push(configurationEntity);
await this.userRepository.save(userEntity);
configurationEntity.createdBy = undefined;
return configurationEntity;
}
一切似乎都很好,当我保存它时,它实际上保存得很好。 我遇到的问题是,当我尝试查找用户并查看 createdConfigurations 时,我只有一个配置 ID 的列表。 我想查看完整的 ConfigurationEntity(由于循环引用而没有 createdBy)。 我怎样才能做到这一点?
实际的:
{
id: 1,
createdConfigurations: [ { id: 3 }, { id: 4 } ]
}
预期的:
{
id: 1,
createdConfigurations: [ { id: 3, brand: 'Mercedes', ... }, { id: 4, brand: 'Kia', ... } ]
}
我发现了问题所在。 这与急切的选择有关。 我的配置实体如下所示:
@Entity('configurations')
export class ConfigurationEntity {
@PrimaryGeneratedColumn()
id: number;
@OneToOne(() => ConfigurationBasicInfoEntity, { cascade: true })
@JoinColumn()
basicInfo: ConfigurationBasicInfoEntity;
@OneToOne(() => ConfigurationColorUpholsteryEntity, {
cascade: true,
})
@JoinColumn()
colorUpholsteryInfo: ConfigurationColorUpholsteryEntity;
@OneToOne(() => ConfigurationFinanceEntity, { cascade: true })
@JoinColumn()
financeInfo: ConfigurationFinanceEntity;
@OneToOne(() => ConfigurationContactEntity, { cascade: true })
@JoinColumn()
contactInfo: ConfigurationContactEntity;
@ManyToOne(() => UserEntity, (user) => user.createdConfigurations)
createdBy: UserEntity;
}
我必须在我的实体的选项中添加 eager: true 才能像这样加载它们:
@Entity('configurations')
export class ConfigurationEntity {
@PrimaryGeneratedColumn()
id: number;
@OneToOne(() => ConfigurationBasicInfoEntity, { cascade: true, eager: true })
@JoinColumn()
basicInfo: ConfigurationBasicInfoEntity;
@OneToOne(() => ConfigurationColorUpholsteryEntity, {
cascade: true,
eager: true,
})
@JoinColumn()
colorUpholsteryInfo: ConfigurationColorUpholsteryEntity;
@OneToOne(() => ConfigurationFinanceEntity, { cascade: true, eager: true })
@JoinColumn()
financeInfo: ConfigurationFinanceEntity;
@OneToOne(() => ConfigurationContactEntity, { cascade: true, eager: true })
@JoinColumn()
contactInfo: ConfigurationContactEntity;
@ManyToOne(() => UserEntity, (user) => user.createdConfigurations)
createdBy: UserEntity;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.