首页 > 解决方案 > OneToOne 加入自我

问题描述

是否可以使用 OneTonOne 关系将实体连接到自身?

我试过这个:

@OneToOne(type => Person, spouse => spouse.id)
@JoinColumn()
spouse: Person; 

但是从原本可以工作的代码中得到这个错误:

{ QueryFailedError: SQLITE_CONSTRAINT: FOREIGN KEY constraint failed
    at new QueryFailedError (/Users/jonhaven/Dev/Maverick/mav-typeorm/src/error/QueryFailedError.ts:7:9)
    at Statement.handler (/Users/jonhaven/Dev/Maverick/mav-typeorm/src/driver/sqlite/SqliteQueryRunner.ts:53:26)
    at Statement.replacement (/Users/jonhaven/Dev/Maverick/mav-typeorm/node_modules/sqlite3/lib/trace.js:19:31)
    at Statement.replacement (/Users/jonhaven/Dev/Maverick/mav-typeorm/node_modules/sqlite3/lib/trace.js:19:31)
  message: 'SQLITE_CONSTRAINT: FOREIGN KEY constraint failed',
  errno: 19,
  code: 'SQLITE_CONSTRAINT',
  name: 'QueryFailedError',
  query: 'DROP TABLE "person"',
  parameters: [] }

标签: typeorm

解决方案


这是 TypeORM 上的 SQLite 问题。您应该将 TypeORM 更新到最新版本,并在关系中添加删除级联选项

@OneToOne(type => Person, spouse => spouse.id, { 
  cascade: true, 
  onDelete: "CASCADE" 
})
@JoinColumn()
spouse: Person; 

推荐阅读