-
-
Notifications
You must be signed in to change notification settings - Fork 6.5k
Description
Issue type:
[ ] question
[x] bug report
[ ] feature request
[ ] documentation issue
Database system/driver:
[ ] cordova
[ ] mongodb
[ ] mssql
[ ] mysql / mariadb
[ ] oracle
[ ] postgres
[ ] cockroachdb
[x] sqlite
[ ] sqljs
[ ] react-native
[ ] expo
TypeORM version:
[x] latest
[ ] @next
[ ] 0.x.x (or put your version here)
Steps to reproduce or a small repository showing the problem:
Here is a repository to reproduce the bug:
https://github.com/youtix/nest-typerorm-test
I m trying to save a user conversation with messages. I set the messages field on the conversation entity to cascade: true. But When I try this code:
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);
It creates this query:
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"]
with this error:
{ [Error: SQLITE_CONSTRAINT: FOREIGN KEY constraint failed] errno: 19, code: 'SQLITE_CONSTRAINT' }
I can see it's a problem with the foreign key of messages table but I can't fix it because it's TypeORM library which handle the creation, not me. I searched on internet (documentation, github, stackoverflow) without success. I think it's bug in TypeORM library but I m a novice in it so I prefer asking if I did something wrong
Here are my entities :
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;
}