Hibernate JOINED继承映射与实体自关联注解使用正确性咨询
你当前的Hibernate继承映射+自关联注解设计整体是正确的,完全匹配你提出的父子分表、共用ID、子类自关联的需求:
- 父类Person用
@Inheritance(strategy = InheritanceType.JOINED)完全符合分表设计要求,该策略默认就是父表person存公共字段,子表member存子类特有字段,两表通过id字段关联,不需要额外配置主键映射。 - 子类Member的自关联设计没有问题:你将
id_holder同时映射为基础字段idHolder和关联对象holder,给holder加insertable = false, updatable = false避免同字段重复映射冲突的写法是对的,@OneToMany(mappedBy = "holder")也正确指定了关联关系的维护端,级联配置可以根据你的业务需求调整,当前配的全级联没有语法问题。
可优化的细节点
@ManyToOne的targetEntity = Member.class、referencedColumnName = "id"属性都可以删掉,前者可以通过字段类型自动识别,后者默认就是关联目标实体的主键字段,属于冗余配置。- 基础字段
idHolder的类型和父类主键保持一致用Integer即可,避免后续类型转换异常。 - 前端TS模型里的
idHolder不要用any类型,建议定义为number | null,类型更安全,空值对应无上级holder的场景。 - 可以给自关联的
@ManyToOne显式加fetch = FetchType.LAZY(默认其实就是懒加载,显式写出来更清晰),避免查询Member的时候递归查holder引发性能问题。
业务使用注意事项
保存Member的时候两种赋值外键的方式都可以用:如果前端只传holder的ID,直接给idHolder字段赋值即可;如果需要级联保存holder对象,就给holder字段赋值同时开启对应级联策略即可,两种方式不会冲突。
内容的提问来源于stack exchange,提问作者Carlos Messala Oliveira
相关产品推荐
相关产品推荐

