使用TypeORM查询PostgreSQL数据库多条记录失败求助
PostgreSQL + TypeORM 查询仅返回单条匹配记录的问题
问题场景
使用TypeORM的Repository的find和findBy方法查询PostgreSQL数据库时,数据库中存在多条匹配service_name的记录,但查询始终只返回一条结果。已尝试以下两种写法:
let response = await this.repo.find({ where: { service_name: Equal(service_name) }, } ) let response = await this.repo.findBy({ service_name: Equal(service_name) })
可行解决思路
校验实体主键定义:若实体类中
service_name被错误标记为@PrimaryColumn()(主键),TypeORM会将其视为唯一标识,查询时仅返回最后匹配的单条记录。确认实体的主键为业务唯一字段(如自增ID),service_name设为普通列:import { Entity, PrimaryGeneratedColumn, Column } from "typeorm"; @Entity() export class YourEntity { @PrimaryGeneratedColumn() id: number; @Column() service_name: string; }简化查询条件写法:
findBy方法无需使用Equal操作符,find方法中也可直接传入值,冗余的Equal可能导致解析异常。尝试调整为:// 使用find const response = await this.repo.find({ where: { service_name } }); // 使用findBy const response = await this.repo.findBy({ service_name });排查自定义拦截逻辑:检查项目中是否存在
QueryBuilder拦截器、实体afterLoad钩子或全局查询过滤器,这类自定义逻辑可能篡改查询结果,限制返回条数。用QueryBuilder直接验证:绕开Repository封装,用
QueryBuilder执行查询,验证数据库实际返回结果:const response = await this.repo.createQueryBuilder("entity") .where("entity.service_name = :name", { name: service_name }) .getMany();若此查询返回多条,说明问题出在TypeORM的
find/findBy配置或实体定义;若仍返回单条,需检查数据库数据是否存在隐藏差异(如大小写、空格)。
内容的提问来源于stack exchange,提问作者Kaz
相关产品推荐
相关产品推荐

