起因:
- 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
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並注明出處。
