'SQLite错误:没有这样的表'与连接数据库上的TypeORM可访问其他表。有没有特定的方法来达到外键表?

问题描述 投票:0回答:1

晚上好,

我试图通过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
}
javascript sqlite nestjs typeorm
1个回答
1
投票

找到了。奇怪的弯曲。

在我的实体定义中,我让@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;
}

它就像一个魅力。

© www.soinside.com 2019 - 2024. All rights reserved.