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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM