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