springmvc hibernate 关闭自动创建或更新数据库

   最近团队又启动了好早前发布的一个古老项目,框架组成:springmvc+hibernate+jsp。看了下之前自己写的代码,百般嫌弃,琢磨了半天需求,唯一感想 - 重构,=_=|| 果然由俭入奢易,由奢(springboot前后端分离)入俭(springmvc+jsp)难啊~~

问题描述

   因需求变化,DB中某个表的某个字段需要加大size,于是愉快的修改了表结构也整理好了更新sql,结果部署到开发环境后,前端大佬提醒API报错了!

问题回溯

   Hibernate有自动创建和更新表的操作,于是看了下表对应的实体类,上面有写声明varchar(64),这就是表结构被变更的原因!

import javax.persistence.Column;

@Column(name = "user_name", columnDefinition = "varchar(64) COMMENT '用户姓名'")

解决方案

hibernate.hbm2ddl.auto设置为none

关闭Hibernate自动更新,将属性值hibernate.hbm2ddl.auto设置为none

相关知识点

Hibernate xml方式相关配置

springmvc中hibernate配置可使用map或者properties两种方式,区别不大:

  • <property name=“jpaPropertyMap”>
  • <property name=“jpaProperties”>

以下是jpaProperties方式:

<!-- Jpa Entity Manager 配置 关联hibernateJpaVendorAdapter -->
	<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
		
		<!-- 数据源bean -->
		<property name="dataSource" ref="dataSource"/>
		<!-- 指定JPA属性;如Hibernate中指定是否显示SQL的是否显示、方言等 -->
		<property name="jpaProperties">
           <props>
               <!-- <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop> -->
               <prop key="hibernate.ejb.naming_strategy">org.hibernate.cfg.ImprovedNamingStrategy</prop>
               <!-- <prop key="hibernate.cache.provider_class">org.hibernate.cache.NoCacheProvider</prop> -->
               <prop key="hibernate.show_sql">true</prop>
               <prop key="hibernate.format_sql">true</prop>
               <!-- <prop key="hibernate.hbm2ddl.auto">validate</prop> -->
               <prop key="hibernate.hbm2ddl.auto">update</prop>
           </props>
       </property>
	</bean>

hbm2ddl.auto 属性

属性值说明
validate加载hibernate时,验证创建数据库表结构
create每次加载hibernate,重新创建数据库表结构
create-drop加载hibernate时创建,退出是删除表结构
update加载hibernate自动更新数据库结构
none不做任何操作

总结

对于hbm2ddl.auto
一般情况下,项目是需要数据库脚本版本管理,所以建议使用none!
若项目不需要脚本管理,可以使用 validate / update。
create / create-drop 操作杀伤性太大,最好不要使用,不然删库跑路那是家常便饭。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值