TypeORM嵌入式实体两种查询方式的疑问:为何均有效及优选方案?
TypeORM两种查询嵌套字段方式的解析
为何两种写法都有效?
你定义的Event实体里,location是Address类型,但Address类的city字段直接加了@Column装饰器——这并没有把Address当作独立实体或嵌入实体,TypeORM会自动把这个嵌套类里的列扁平化映射到Event对应的数据库表中,最终Event表会直接有一个city列。
所以jobEvent.location.city和jobEvent.city本质上指向的是同一张表的同一个字段,自然两种写法都能生效。
相关文档说明
TypeORM文档明确提到:如果在实体的嵌套类属性中使用@Column,且未将嵌套类标记为@Embedded(),这些列会被直接映射到主实体的表中,相当于把嵌套类的字段“平铺”到主表结构里。
推荐使用哪种方式?
优先用jobEvent.location.city的写法:
- 可读性更强,能直观体现
city是location对象的下属属性,和你的实体定义结构一致; - 扩展性更好:如果后续把
Address改成@Embedded()嵌入实体,或者关联成独立的Address实体,这种写法不需要修改,而简写的jobEvent.city会直接失效; - 避免歧义:如果未来
Event实体新增了一个直接的city字段,简写写法会出现字段冲突,而完整写法不会有这个问题。
内容的提问来源于stack exchange,提问作者ggat
相关产品推荐
相关产品推荐

