JPA实体类两个属性映射同一数据库字段是否合法?
问题解答
这种写法是可行的,不属于错误用法,是JPA实际开发中非常常见的合理用法。
合理性说明
- 你为
idInventory字段显式配置了insertable = false, updatable = false属性,这代表该字段仅会映射数据库id_inventory字段的读取操作,不会参与任何新增、更新SQL的字段赋值,所有对id_inventory字段的写操作控制权都交给了@ManyToOne标注的inventory关联属性,不会出现两个属性操作同个字段产生冲突的问题。 - 这种写法的核心作用是在不需要加载完整
Inventory关联对象的场景下,可以直接读取idInventory拿到外键值,避免触发不必要的关联查询,有效提升接口性能。
使用注意事项
- 不要手动修改
idInventory的属性值,所有关联关系的变更都需要通过修改inventory属性完成,否则会导致实体内存属性和数据库存储数据不一致的问题。 - 如果你没有直接获取外键值的高频需求,也可以直接删除
idInventory这个冗余字段,需要外键时调用priceList.getInventory().getId()即可,两种写法都符合JPA规范。
内容的提问来源于stack exchange,提问作者alex
相关产品推荐
相关产品推荐

