使用级联 true 保存实体的 TypeORM 问题

2024-01-06

我正在将 NestJS 与 TypeORM 结合使用,并尝试保存用户与消息的对话。我将对话实体上的消息字段设置为级联:真。但是当我尝试这段代码时:

const user3: User = { login: 'admin', createdBy: 'system', lastModifiedBy: 'system' };
const user4: User = { login: 'user', createdBy: 'system', lastModifiedBy: 'system' };
const message1: Message = { content: 'Hello How are you? ', createdBy: user3.login, lastModifiedBy: user3.login };
const conversation1: Conversation = { sender: user3, reciever: user4, messages: [message1] };
getConnection().getRepository(Conversation).save(conversation1);

它创建这个查询:

INSERT INTO "message"("id", "createdBy", "createdDate", "lastModifiedBy", "lastModifiedDate", "content", "conversationSenderId", "conversationRecieverId", "conversationDate") VALUES (?, ?, datetime('now'), ?, datetime('now'), ?, ?, ?, ?)
-- PARAMETERS: ["67348880-6897-47cb-92ef-5f66ffb2e88c","admin","admin","Hello How are you? ","b2420445-c8ee-4080-86b3-98ab12ef576b","09f3672d-9b2f-4f68-b47e-a7ca5d806ec6","2019-10-24 14:41:40.000"]

出现此错误:

{ [Error: SQLITE_CONSTRAINT: FOREIGN KEY constraint failed] errno: 19, code: 'SQLITE_CONSTRAINT' }

我可以看到这是消息表的外键的问题,但我无法修复它,因为它是处理创建的 TypeORM 库,而不是我。 我在互联网上搜索(文档、github、stackoverflow)没有成功。 我认为这是 TypeORM 库中的错误,但我是新手,所以我更喜欢询问我是否做错了什么

这是我的实体:

export abstract class BaseEntity {
  @ObjectIdColumn()
  @PrimaryGeneratedColumn('uuid')
  id?: string;

  @Column()
  createdBy?: string;

  @CreateDateColumn()
  createdDate?: Date;

  @Column()
  lastModifiedBy?: string;

  @UpdateDateColumn()
  lastModifiedDate?: Date;
}

@Entity('user')
export class User extends BaseEntity {
  @Column()
  login?: string;

  @OneToMany(type => Conversation, conversation => conversation.sender)
  sentConversations?: Conversation[];

  @OneToMany(type => Conversation, conversation => conversation.reciever)
  recievedConversations?: Conversation[];
}

@Entity()
export class Conversation {
  @PrimaryColumn()
  senderId?: string;

  @PrimaryColumn()
  recieverId?: string;

  @CreateDateColumn({ primary: true })
  date?: Date;

  @OneToMany(type => Message, message => message.conversation, { cascade: true })
  messages: Message[];

  @ManyToOne(type => User, user => user.sentConversations)
  @JoinColumn({ name: 'senderId' })
  sender?: User;

  @ManyToOne(type => User, user => user.recievedConversations)
  @JoinColumn({ name: 'recieverId' })
  reciever?: User;
}

@Entity('message')
export class Message extends BaseEntity {
  @Column({ length: 10000 })
  content: string;

  @ManyToOne(type => Conversation, conversation => conversation.messages)
  conversation?: Conversation;
}

在此存储库中,您将能够重现该错误:https://github.com/youtix/nest-typerorm-test https://github.com/youtix/nest-typerorm-test


外键约束位于您的数据库表上。 RDBMS 术语中的级联意味着它将通过每个关系进行传播。我相信您创建的 adminID 不是您的用户表中的用户。您需要先查询该用户,然后将其用于消息推送。这应该可以解决你的问题。

  1. 从用户中选择 *,其中 uname = 'admin'
  2. 插入消息表,其中 userId = (userId from 1)

  3. 庆祝

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用级联 true 保存实体的 TypeORM 问题 的相关文章

随机推荐

  • c# - 如果方法运行时间太长,则中止方法的执行

    如果运行时间太长 如何中止方法的执行 e g string foo DoSomethingComplex but if DoSomethingComplex 花费的时间太长 比如说 20 秒 然后只需将 foo 设置为 您可以创建一个运行您
  • Spring MVC:表单标签和命令错误

    我正在使用 Spring 框架进行编程 在处理表单标记中的 jsp 第 2 行 时显示以下错误后 我感到绝望 Error ERROR org springframework web servlet tags form InputTag Ne
  • Now.sh 构建中断的原因是:当前未启用对实验性语法“decorators-legacy”的支持

    预期的 添加后decko 对装饰器的支持 以及添加对experimetalDecoractors in my tsconfig js并使用 babel plugin proposal decorators in 包 json My now
  • 有没有办法在 Svelte 中将 props 声明为可选

    我创建了一些带有可选道具的组件 例如hide true 我的问题是 当我不通过该道具时 这些恼人的错误消息总是充斥着我的控制台
  • 点云生成

    我有一个 3D 几何形状 必须将其转换为点云 所得到的点云可以被认为等同于对象的激光扫描输出的点云 不需要生成网格 生成的点可能是均匀分布的 也可能只是随机分布的 没关系 3D形状可以以3D数学公式的形式提供 这必须使用 MATLAB 来完
  • 从命令行指定 dockerignore

    我有一个 dockerignore 文件 但对于一个用例 我想在命令行指定 dockerignore 的内容 例如 docker build ignore node modules t foo 有没有办法从命令行执行此操作 我在文档中没有看
  • ECMAScript 6:WeakSet 的用途是什么?

    WeakSet 应该通过弱引用来存储元素 也就是说 如果一个对象没有被其他任何东西引用 那么它应该从 WeakSet 中清除 我写了以下测试 var weakset new WeakSet numbers 1 2 3 weakset add
  • 更改 HTML 元素的背景颜色

    我有一张包含 100 多个不同大小和尺寸的几何形状的图像 我在它上面使用了图像映射并为每个分配了 ID area like area 我在 MySQL 数据库中存储了有关每个形状的记录 例如 box id color code 1 AEEE
  • 优化 QtCreator 编译器的配置

    我在 Windows 7 中使用 QtCreator 我想将其配置为使用第三级优化 O3 用于 C 编译器 我怎样才能加快我的代码速度以及需要进行哪些更改 尝试将下一行添加到您的 pro 文件中 remove possible other
  • 为标签栏设置背景图像

    我正在尝试以编程方式设置应用程序中选项卡栏的背景图像 我的代码如下 根视图控制器 h IBOutlet UITabBar mainTabBar IBOutlet UITabBarItem settingsBarItem IBOutlet U
  • 在新的命名空间中定义简单类型,例如 xsd:string?

    这应该是直截了当的 但在我看来 它似乎只包含有关复杂类型的信息 假设我已经定义了一个名称空间xmlns address http 现在 从我读到的内容来看 我似乎可以执行以下操作
  • React useState - 每个组件使用一个状态还是多个状态? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 使用 Hooks Functional 组件来优化 React 并使代码更具可读性的更好方法是什么 每个组件有一个或多个 setState 钩子
  • 拉伸图像以适合 td

    我想在我的 td 单元格中拉伸图像 怎么做 它是一个选项卡图像 看起来像 的倒置 我需要将图像放置在第一个 td 单元格中 其中包含文本 aaa 将位于该图像的中心 如果不使用 CSS3 则无法拉伸背景图像 In CSS3你有背景大小属性
  • 如何解决Jboss部署错误?

    17 19 30 298 ERROR ProfileServiceBootstrap Failed to load profile Summary of incomplete deployments SEE PREVIOUS ERRORS
  • 使用 ObjectInputStream 读入的对象在 try-catch 块后不保留值

    因此 我将 Car 对象数组写入文件 然后当我尝试在 cars 变量中读回它们时 我在语句上设置了它们cars Car in readObject 但是 当我使用调试器单步调试它时 一旦退出 try catch 块 汽车变量就会 取消设置
  • 从命令行获取所有打开的窗口的列表

    在Windows 7中 是否可以从命令行获取所有打开的桌面窗口的列表 我知道有可能获得所有正在运行的进程的列表 https stackoverflow com questions 53489 how do you list all proc
  • 如何恢复已删除的 Facebook 应用程序?

    我的一位管理员已删除该应用程序 有什么办法可以恢复吗 我如何联系 Facebook 的开发人员 您可以通过进入您的开发者帐户请求来恢复已删除的 Facebook 应用程序 https developers facebook com appe
  • 如何解决“链接器命令失败,退出代码 1”问题?

    我正在尝试使用OMPTrace这是一个追踪和可视化的工具OpenMP程序执行如下所示https github com passlab omptrace https github com passlab omptrace 中给出的代码exam
  • 这两个类都支持封装吗?...?

    public class Normal public string name name is public public String getName return name public String setName String new
  • 使用级联 true 保存实体的 TypeORM 问题

    我正在将 NestJS 与 TypeORM 结合使用 并尝试保存用户与消息的对话 我将对话实体上的消息字段设置为级联 真 但是当我尝试这段代码时 const user3 User login admin createdBy system l