gpt4 book ai didi

nestjs - TypeORM 问题保存实体级联 true

转载 作者:行者123 更新时间:2023-12-04 13:57:42 29 4
gpt4 key购买 nike

我正在将 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

最佳答案

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

  • 选择 * from user where uname = 'admin'
  • 插入消息表,其中 userId = (userId from 1)
  • 庆祝
  • 关于nestjs - TypeORM 问题保存实体级联 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58554432/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com