对于hibernate注解实体中属性对应数据库表的列名,怎么命名的问题,我们肯定不愿一个个属性去配置吧
在applicationContext.xml中的sessionFactory中配置
<property name="namingStrategy"> <bean class="org.hibernate.cfg.ImprovedNamingStrategy"></bean> </property>Caused by: org.springframework.beans.NotWritablePropertyException: Invalid property 'namingStrategy' of bean class [org.springframework.orm.hibernate5.LocalSessionFactoryBean]: Bean property 'namingStrategy' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?
原来是Hibernate5.1相关配置变了。
参考:http://412887952-qq-com.iteye.com/blog/2315686
参考:http://stackoverflow.com/questions/32165694/spring-hibernate-5-naming-strategy-configuration
hibernate.ejb.naming_strategy将不再被支持,而是被替换成了两个属性: hibernate.physical_naming_strategy hibernate.implicit_naming_strategy
对于physical_naming_strategy有两个常用的配置:
org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl对于PhysicalNamingStrategyStandardImpl有DefaultNamingStrategy的效果,对于SpringPhysicalNamingStrategy有ImprovedNamingStrategy的效果。
在sessionFactory的bean里配置
<property name="PhysicalNamingStrategy"> <bean class="org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl"></bean> </property>和在sessionFactory bean的hibernateProperties property中配置
<prop key="hibernate.physical_naming_strategy">org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl</prop>是一样的。
org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy不在hibernate的jar包中先不去看。
<property name="ImplicitNamingStrategy"> <bean class="org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyHbmImpl" /> </property>和 <prop key="hibernate.implicit_naming_strategy">org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyHbmImpl</prop>是一样的。
至于它们分别的命名方式并没看出有什么不一样,继续往下吧。
