Jpa多数据源,为每个数据源配置单独的命名策略

起因:

  • 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
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

posted @ 2019-01-09 16:05  道凡  阅读(1715)  评论(0)    收藏  举报