• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

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

武飞扬头像
荔枝hu
帮助1

   最近团队又启动了好早前发布的一个古老项目,框架组成: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 操作杀伤性太大,最好不要使用,不然删库跑路那是家常便饭。

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgcaggi
系列文章
更多 icon
同类精品
更多 icon
继续加载