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
可以看到最后更新了从表对象
主表级联更新从表对象成功