对于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>
是一样的。
至于它们分别的命名方式并没看出有什么不一样,继续往下吧。