如何基于TypeORM中的相关实体属性查询实体?

时间:2018-09-07 22:04:42

标签: typeorm

我有一个实体Transaction和一个实体Integration

@Entity()
export default class Transaction {

    @PrimaryGeneratedColumn()
    public id_trans?: number;

    @OneToOne(type => Integration, i => i.transaction, { nullable: true })
    public integration?: Integration;
}

@Entity()
export default class Integration {

    @PrimaryGeneratedColumn()
    public id_cust?: number;

    @OneToOne(type => Transaction, t => t.integration)
    @JoinColumn({ referencedColumnName: 'id_trans', name: 'int_id_module' })
    public transaction?: Transaction;
}

我试图通过使用Integration属性作为过滤器来查询事务。

const id_api = 10;
const transaction = await repository.find({
        where: { integration: { int_id_api: id_api} },
        relations: ['integration', 'customer'],
    });

但是即使integration.int_id_apiid_api属性不同,它也会返回整个交易表

我在做什么错。我应该怎么做才能使此查询正常工作?

1 个答案:

答案 0 :(得分:-1)

您需要向所有实体添加主键。 From the doc

  

每个实体必须至少具有一个主键列。这是一个   要求和您无法避免。要将列设为主键,   您需要使用@PrimaryColumn装饰器。

假设您像这样更新Integration实体

@Entity()
export default class Integration {

    @PrimaryColumn()
    public id_inte: number;

    @OneToOne(type => Transaction, t => t.integration)
    @JoinColumn({ referencedColumnName: 'id_trans', name: 'int_id_module' })
    public transaction?: Transaction;
}

您应该能够找到类似的交易

const transaction = await repository.find({
    where: { integration: { id_inte: some_id } },
    relations: ['integration', 'customer'],
});