typeorm装饰器OneToMany之cascadeUpdate

1默认选项

实体:

 

import { Entity,PrimaryColumn,Column,OneToMany,JoinColumn} from 'typeorm'
import { User} from './User'
@Entity()
export class Post {
    @PrimaryColumn('int')
    id:number;
    @Column('varchar')
    name:string
    @OneToMany(type=>User,user=>user.post)
    users:User[]
}
import { Entity,PrimaryColumn,Column,ManyToOne,JoinColumn,Index} from 'typeorm'
import { Post } from './Post'
import { LazyRelationsWrapper } from 'typeorm/lazy-loading/LazyRelationsWrapper';
@Entity()
export class User{
    @PrimaryColumn('int')
    id:number;
    @Column('varchar')
    name:string
    @ManyToOne(type=>Post,post=>post.users)
    @JoinColumn()
    post:Post
}

save方法更新:

 

 

import { createConnection ,Repository} from 'typeorm'
import { User } from './entity/User'
import { Post } from './entity/Post'
createConnection({
    name:'test',
    type:'mysql',
    database:'test',
    host:'localhost',
    port:3306,
    username:'root',
    password:'123456',
    charset:'UTF8',
    entities:[User,Post],
    synchronize:true,
    dropSchema:true,
    logging:'all',
    logger:'simple-console'
}).then(async connection=>{
    let userRepository:Repository<User> = connection.getRepository(User)
    let postRepository:Repository<Post> = connection.getRepository(Post)
    let user1:User = userRepository.create({id:1,name:'李四'})
    let user2:User = userRepository.create({id:2,name:'张三'})
    let post:Post = postRepository.create({id:1,name:'滴滴滴滴'})
    await userRepository.save(user1)
    await userRepository.save(user2)
    post.users = [user1,user2]
    await postRepository.save(post)
    user1.name = '李五'
    await postRepository.save(post)
})

更新结果:

 

 

mysql> select * from user;
+----+------+--------+
| id | name | postId |
+----+------+--------+
|  1 | 李四 |      1 |
|  2 | 张三 |      1 |
+----+------+--------+
2 rows in set (0.00 sec)

mysql> select * from post;
+----+----------+
| id | name     |
+----+----------+
|  1 | 滴滴滴滴 |
+----+----------+
1 row in set (0.00 sec)

可见,保存主表对象时,只是更新从表属性的外键,从表的其他属性不会更新

 

 

2cascadeUpdate为true

实体:

 

import { Entity,PrimaryColumn,Column,OneToMany,JoinColumn} from 'typeorm'
import { User} from './User'
@Entity()
export class Post {
    @PrimaryColumn('int')
    id:number;
    @Column('varchar')
    name:string
    @OneToMany(type=>User,user=>user.post,{
        cascadeUpdate:true
    })
    users:User[]
}
import { Entity,PrimaryColumn,Column,ManyToOne,JoinColumn,Index} from 'typeorm'
import { Post } from './Post'
import { LazyRelationsWrapper } from 'typeorm/lazy-loading/LazyRelationsWrapper';
@Entity()
export class User{
    @PrimaryColumn('int')
    id:number;
    @Column('varchar')
    name:string
    @ManyToOne(type=>Post,post=>post.users)
    @JoinColumn()
    post:Post
}

save更新:

 

 

.then(async connection=>{
    let userRepository:Repository<User> = connection.getRepository(User)
    let postRepository:Repository<Post> = connection.getRepository(Post)
    let user1:User = userRepository.create({id:1,name:'李四'})
    let user2:User = userRepository.create({id:2,name:'张三'})
    let post:Post = postRepository.create({id:1,name:'滴滴滴滴'})
    await userRepository.save(user1)
    await userRepository.save(user2)
    post.users = [user1,user2]
    await postRepository.save(post)
    user1.name = '李五'
    await postRepository.save(post)
})

更新结果:

 

 

mysql> select * from user;
+----+------+--------+
| id | name | postId |
+----+------+--------+
|  1 | 李五 |      1 |
|  2 | 张三 |      1 |
+----+------+--------+
2 rows in set (0.00 sec)

sql日志:

 

 

executing query: START TRANSACTION
executing query: INSERT INTO `post`(`id`, `name`) VALUES (?,?) -- PARAMETERS: [1,"滴滴滴滴"]
executing query: UPDATE `user` SET `postId`=?  WHERE `id`=? -- PARAMETERS: [1,1]
executing query: UPDATE `user` SET `postId`=?  WHERE `id`=? -- PARAMETERS: [1,2]
executing query: COMMIT
executing query: SELECT `subject`.`id` AS `subject_id`, `subject`.`name` AS `subject_name` FROM `post` `subject` WHERE `subject`.`id`=? -- PARAMETERS: [1]
executing query: SELECT `subject`.`id` AS `subject_id`, `subject`.`name` AS `subject_name`, `subject`.`postId` AS `subject_postId` FROM `user` `subject` WHERE (`subject`.`id`=? OR `subject`.`id`=?) -- PARAMETERS: [1,2]
executing query: SELECT `user`.`id` AS `id`, `user`.`postId` AS `postId` FROM `user` `user` WHERE ((`user`.`postId` = ?)) -- PARAMETERS: [1]
executing query: SELECT `user`.`id` AS `user_id`, `user`.`name` AS `user_name`, `user`.`postId` AS `user_postId` FROM `user` `user` WHERE `user`.`postId`=? -- PARAMETERS: [1]
executing query: START TRANSACTION
executing query: UPDATE `user` SET `name`=?  WHERE `id`=? -- PARAMETERS: ["李五",1]
executing query: COMMIT

可以看到最后更新了从表对象

 

 

主表级联更新从表对象成功






 



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值