晚上好,
我正在尝试通过TypeORM查询存储在sqlite数据库中的名为“ MessageEntityXREF”的表。
数据库已连接,其他表也可以访问。
当我尝试获取此特定表时: “ QueryFailedError:SQLITE_ERROR:没有这样的表:message_entity_xref”
任何帮助或建议,将不胜感激。
谢谢
我试图更改构造函数中的顺序,更改了类型。 但是,考虑到其他表使用相同的方法,我倾向于认为此表存在问题。 我向sqlite db查询所有表的列表,它给出了一个列表,其中包含MessageEntityXREF。 我为SQLite安装了数据库浏览器,并且该表的此处是MessageID和EntityId列。
注意:数据库中有一个名为“实体”的表,这可能会导致与TypeORM使用@Entity等的倾向混淆。
使用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
}
答案 0 :(得分:2)
就我而言,原因是不同的。为了使TypeORM与SQLite一起使用,我需要向TypeORM选项添加synchronize: true
:
TypeOrmModule.forRoot({
type: 'sqlite',
database: path.resolve(__dirname, '../db.sqlite3'),
entities: [User, Post],
logging: true,
synchronize: true,
})
答案 1 :(得分:0)
找到了。奇怪的弹性。
在我的实体定义中,我让@Entity()为空
import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';
@Entity()
export class MessageEntityXREF {
@PrimaryGeneratedColumn()
MessageId: number;
@Column()
EntityId: number;
}
,然后typeORM向sqlite db请求表“ message_entity_xref”。 而不是MessageEntityXREF。
强制这样:
import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';
@Entity('MessageEntityXREF')
export class MessageEntityXREF {
@PrimaryGeneratedColumn()
MessageId: number;
@Column()
EntityId: number;
}
它就像一种魅力。