连接的DB上带有TypeORM的“ SQLite错误:没有这样的表”,可以访问其他表。有使用外键访问表的特定方法吗?

时间:2019-04-16 14:41:12

标签: javascript sqlite nestjs typeorm

晚上好,

我正在尝试通过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
}

2 个答案:

答案 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;
}

它就像一种魅力。