晚上好,
我试图通过TypeORM查询存储在sqlite DB上的名为'MessageEntityXREF'的表。
数据库已连接,其他表可以访问。
当我尝试使用此特定表时:“QueryFailedError:SQLITE_ERROR:没有这样的表:message_entity_xref”
任何帮助或建议将不胜感激。
谢谢
我试图改变构造函数中的顺序,改变了输入。但是,考虑到相同的方法适用于其他表,我倾向于认为此表存在问题。我查询了sqlite db以获取所有表的列表,它给出了一个包含MessageEntityXREF的列表。我为SQLite安装了数据库浏览器,该表在这里有MessageID和EntityId列。
注意:数据库中有一个名为“Entities”的表,可能导致与使用@Entity等的TypeORM倾向混淆...
使用nestJS,我为这个表创建了一个实体,然后将存储库注入一个自定义服务,然后由在该存储库中找到的函数使用:
消息服务
@Entity export class MessageEntityXREF {
@PrimaryColumn() MessageId: number;
@Column() EntityID: number; }
custom service
@InjectRepository(MessageEntityXREF)
private readonly messageEntityRepository: Repository< MessageEntityXREF>
async getMessagesByEntityId(id: number): Promise<any[]> {
try {
return await this.messageEntityRepository.find({
select: ['MessageId','EntityId'],
where: [
{ EntityId: id}
]
});
} catch (error) {
throw error;
}
}
}
我期望具有给定EntityID的所有MessageId的列表。
当没有给出ID时,我得到一个空数组(预期)。
当我提供ID时,我从服务器收到500错误“QueryFailedError:SQLITE_ERROR:no such table:message_entity_xref”
实体的定义
import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';
@Entity()
export class MessageEntityXREF {
@PrimaryGeneratedColumn()
MessageId: number;
@Column()
EntityId: number;
}
消息模块
@Module({
imports: [
CacheModule.register(),
TypeOrmModule.forFeature([Messages, MessageEntityXREF]),
],
providers: [MessagesService, MessagesResolver],
controllers: [MessagesController],
})
export class MessagesModule {}
和ormconfig.json
{
"skip": false,
"name": "default",
"type": "sqlite",
"database": "./sqliteDB/solve.rld",
"entities": ["src/**/**.entity{.ts,.js}"],
"logging": false
}
找到了。奇怪的弯曲。
在我的实体定义中,我让@Entity()为空
import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';
@Entity()
export class MessageEntityXREF {
@PrimaryGeneratedColumn()
MessageId: number;
@Column()
EntityId: number;
}
然后typeORM为表“message_entity_xref”请求sqlite db。而不是MessageEntityXREF。
像那样强迫它:
import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';
@Entity('MessageEntityXREF')
export class MessageEntityXREF {
@PrimaryGeneratedColumn()
MessageId: number;
@Column()
EntityId: number;
}
它就像一个魅力。