Ben*_*eri 5 postgresql typescript typeorm nestjs
给定以下关系:
@Entity({name: 'accounts'})
export class Account {
@PrimaryGeneratedColumn('uuid')
id: string;
@OneToOne(type => Address, address => address.id)
@JoinColumn({name: 'address_id'})
address: Address;
@Column()
name: string;
}
Run Code Online (Sandbox Code Playgroud)
以及地址关系:
@Entity({name: 'addresses'})
export class Address {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column({length: 45})
country: string;
}
Run Code Online (Sandbox Code Playgroud)
当我account通过以下方式获取实体时:
/**
* Gets account by haccount ID with ALL relations
* @param accountId The account ID
*/
public async getAccountByAccountIdWithRelations(accountId: string): Promise<Account> {
return await this.findOneOrFail({id: accountId}, {relations: ['address']});
}
Run Code Online (Sandbox Code Playgroud)
我得到了包含其中关系的完整Account实体。Address
然后当我执行以下操作时:
account.address.country = 'newcountry';
Run Code Online (Sandbox Code Playgroud)
并且地址this.save(account)中的doaccountRepository根本不会更新!
当我在保存之前执行控制台日志时,我看到account具有更新地址的实体,所以这真的很奇怪!
为什么会发生这种情况?
注意:所有查询都在一个事务中完成;我不知道这是否重要
应设置级联。这是我的实体的示例:
@Entity()
@Index([ 'studyId', 'teamId', 'enterdate' ])
export class DataMessage extends BaseEntity {
@PrimaryGeneratedColumn('increment') id: number;
@CreateDateColumn() enterdate: Date;
@UpdateDateColumn({ select: false })
updatedAt?: Date;
@Column() owner: string;
@Column() studyId: number;
@Column() teamId: number;
@Column() patient: string;
@Column() orderId: number;
@Column({ default: DataMessageStatus.OPEN })
status: DataMessageStatus;
@Column()
@Index()
resultId: number;
@OneToMany(() => DataMessageContent, (c) => c.message, { cascade: true })
contents: DataMessageContent[];
}
@Entity()
export class DataMessageContent extends BaseEntity {
@PrimaryGeneratedColumn('increment') id: number;
@CreateDateColumn() enterdate: Date;
@Column() owner: string;
@Column() role: UserRole;
@Column({ default: MessageStatus.UNREAD })
status: MessageStatus;
@Column() txt: string;
@ManyToOne(() => DataMessage, (m) => m.contents)
message: DataMessage;
}
Run Code Online (Sandbox Code Playgroud)
这也适用于 onetoone 关系。
| 归档时间: |
|
| 查看次数: |
20034 次 |
| 最近记录: |