JPA实体关联映射自动生成冗余列名报错如何解决
JPA关联映射自动生成拼接列名问题解决方案
- 报错原因:JPA/Hibernate未正确识别关联列的映射关系,默认采用「关联实体属性名_关联实体主键列名」的规则自动生成关联列名,才会出现
internal_plan_id_internal_plan_id的错误列名 - 解决方案1:补全子表@JoinColumn属性
你当前子表的@ManyToOne注解仅指定了关联列名,需额外添加referencedColumnName属性显式指定父表中对应的关联主键列名,修改后代码如下:
其中@ManyToOne @JoinColumn(name = "internal_plan_id", referencedColumnName = "internal_plan_id") private FinancialPlanDao financialPlan;name对应子表的关联列名,referencedColumnName对应父表的主键列名,显式指定后JPA就不会自动拼接列名。如果该关联列不需要通过子实体做插入、更新操作,还可以加上insertable = false, updatable = false属性避免字段冲突。 - 解决方案2:修正Hibernate命名策略(针对Spring Boot项目)
若修改注解后仍报错,大概率是项目配置的Hibernate命名策略会自动转换拼接列名,在application配置文件中添加如下配置即可:
如果你用的是yaml配置,对应写法为:# application.properties 配置 spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyJpaCompliantImpl spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImplspring: jpa: hibernate: naming: implicit-strategy: org.hibernate.boot.model.naming.ImplicitNamingStrategyJpaCompliantImpl physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
内容的提问来源于stack exchange,提问作者Masoom Raza
相关产品推荐
相关产品推荐

