起因:
- spring data jpa多数据源配置可以参考Jpa多数据源配置,我就是参考这篇文章配置好的。
- 我的数据源有两个,一个是mysql,一个是sqlserver。
- mysql数据库的表字段形式采用的是jpa默认的命名策略,实体属性采用
currentUserName
形式的驼峰命名,映射时自动将大写转换为小写,并用_(下划线)连接,即current_user_name
。 - 但是sqlserver数据库中表中字段的命名为CurrentUserName这种形式。所以在映射的时候会报异常--无效的列名。即使在相关实体的字段上添加
@column
注解,但是仍然无效。 - 经过查找资料,原因是因为jpa默认的命名策略为
spring.jpa.hibernate.naming.physical-strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy
,采用这种命名策略,@column
注解会失效。网上的解决办法都是单数据源的配置,都不能解决我当前项目遇到的问题。 - 无奈只能自己解决。
解决办法
- 依照上面的参考文章,多数据源配置中有这么一段代码,如下:
-
//注入JPA配置实体 @Autowired private JpaProperties jpaProperties; //获取jpa配置信息 private Map<String, String> getVendorProperties(DataSource dataSource) { return jpaProperties.getHibernateProperties(dataSource); }
- 在
return jpaProperties.getHibernateProperties(dataSource);
这段代码前加上以下代码: -
jpaProperties.getHibernate().getNaming().setPhysicalStrategy("org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl");
即
-
//获取jpa配置信息 private Map<String, String> getVendorProperties(DataSource dataSource) { jpaProperties.getHibernate().getNaming().setPhysicalStrategy("org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl"); return jpaProperties.getHibernateProperties(dataSource); }
作者:semaphore
链接:https://www.jianshu.com/p/1a4a35bcf0f6
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。