hibernate自动建表到数据库及spring下自动建表到数据库

Hibernate支持自动建表,在开发阶段很方便,可以保证hbm与数据库表结构的自动同步。

如何使用呢?很简单,只要在hibernate.cfg.xml里加上如下代码

Xml代码<property name="hbm2ddl.auto">update</property>  

 

update:表示自动根据model对象来更新表结构,启动hibernate时会自动检查数据库,如果缺少表,则自动建表;如果表里缺少列,则自动添加列。

还有其他的参数:
create:启动hibernate时,自动删除原来的表,新建所有的表,所以每次启动后的以前数据都会丢失。

create-drop:启动hibernate时,自动创建表,程序关闭时,自动把相应的表都删除。所以程序结束时,表和数据也不会再存在。

PS:数据库要预先建立好,因为hibernate只会建表,不会建库

==========================================


表结构和数据总是在程序执行的时候无端的修改,折腾了好长时间,查了很长时间hibernate的数据库映射文件和接口程序,始终没有发现有什么错误,到最后才发现了它!
           <property name="hibernate.hbm2ddl.auto" value="update" />
解释如下:

hibernate.hbm2ddl.auto Automatically validate or export schema DDL to the database when the SessionFactory is created. With create-drop, the database schema will be dropped when the SessionFactory is closed explicitly. eg. validate | update | create
| create-drop

其实这个参数的作用主要用于:自动创建|更新|验证数据库表结构。
如果没有此方面的需求建议set value="none".

其它几个参数的意思:

validate               加载hibernate时,验证创建数据库表结构
create                  每次加载hibernate,重新创建数据库表结构
create-drop        加载hibernate时创建,退出是删除表结构
update                 加载hibernate自动更新数据库结构

如果发现数据库表丢失或新增,请检查hibernate.hbm2ddl.auto的配置 可设置 <property name="hibernate.hbm2ddl.auto" value="none" />

建议在开发环境下使用,在生产环境下去掉。

 

优点:

1、自动创建新表

2、自动创建新字段

3、自动修改字段类型

 

缺点:

1、不会自动删除表

2、不会自动删除字段

3、自动创建的新字段只能是在最后。

 

针对缺点的建议:定期把数据库清空(删除所有表),然后启动项目,让hibernate自动创建表结构和索引,当然一些初始化数据需要手工导入。


补充:如果使用spring管理hibernate,如何建表到数据库:

<bean id="sessionFactory"
  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"
  p:dataSource-ref="dataSource">
  <property name="hibernateProperties">
   <props>
    <prop key="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</prop>
    <prop key="hibernate.show_sql">true</prop>
    <prop key="hibernate.format_sql">true</prop>
    <prop key="hibernate.hbm2ddl.auto">update</prop>
   </props>
  </property>
 </bean>
起作用的是<prop key="hibernate.hbm2ddl.auto">update</prop>这一句,自动建表

时间: 2024-09-19 05:50:26

hibernate自动建表到数据库及spring下自动建表到数据库的相关文章

SQL Server简单模式下误删除堆表记录恢复方法(绕过页眉校验)_MsSql

首先,我需要强调下,这篇主旨是揭示堆表的删除记录找回的原理,我所考虑的方面并不适用于每个人的每种情况,望大家见谅~ 很多朋友认为数据库在简单模式下,堆表误删除一条记录,是无法找回的,因为没有日志记录.其实不然,某种意义上是可以找回的,因为堆表在删除记录时,只更改了行偏移,实际数据没有被物理删除,所以利用这点,测试了下恢复数据,果然成功了,但是还有点问题没有研究出结果:如果不关闭页面校验,除了更改偏移量,删除数据时还需要更改页眉,这点还没时间去琢磨,所以恢复数据时还要能推断出页眉的16进制对应关系

在Linux下访问MS SQL Server数据库(转)

server|访问|数据|数据库 在Linux下访问MS SQL Server数据库 ---- Linux 作 为 一 个 免 费 的Unix 类 操 作 系 统, 以 其 开 放 性 源 代 码. 多 任 务.X window 等 特 点 为 众 多 的 用 户 所 采 用, 并 有 很 多 企 业 采 用Linux 来 作 为 其 内 部 网 的 全 功 能 服 务 器(WWW,FTP,Email.DNS). 企 业 的 内 部 网 不 仅 要 提 供 文 本 信 息 的 访 问, 还 要

表空间 数据文件-oracle数据库表空间中的数据文件自动扩展到32G后不再自动扩展

问题描述 oracle数据库表空间中的数据文件自动扩展到32G后不再自动扩展 CSDN移动问答oracle表空间中的数据文件自动扩展到32G后不再自动扩展,报ora-01653错误,我之后手动加了个数据文件,但是不久之后这个数据文件自动扩展到了32G又报错,请问这是什么原因,难道以后只能手动添加数据文件么????

javaweb开发中如何实现将数据库表中的某一状态自动置为Y或N

问题描述 javaweb开发中如何实现将数据库表中的某一状态自动置为Y或N 现在我做的毕业设计有这样一个需求:学生缴学费有一个缴费时间和到期时间,到期时间就是有效期.比如说我交学费,有效期是一年,交了学费后,交费状态就是Y,怎样实现一年有效期结束之后自动将学生表中学生的交费状态置为N?javaweb开发用的框架是SSM和easyui. 诚心请教各位大牛们!感激不尽~~~ 解决方案 有三个 字段 缴费时间.到期时间.缴费状态,默认情况下 缴费状态就是N(未缴费)缴费后状态在程序中修改成Y(已缴费)

利用hibernate生成表时的同时能不能自动向表中插入一条记录

问题描述 利用hibernate生成表时的同时能不能自动向表中插入一条记录 解决方案 解决方案二:生成后直接跟一条插入语句.

请教一下。 我用vb编写了一个 数据库+发帖功能(自动填写表单) 。

问题描述 请教一下.我用vb编写了一个数据库+发帖功能(自动填写表单).但是,要发帖就得用电脑,真麻烦.现在像用android的手机(g7)发帖.我自己的资源.1,正在看java的教材.继承,接口,io,容器这些都看得7788啦.自学能力还行吧.2,然后希望把数据库放到网上.(用java的jsp?还是用去学学php呢?3,然后如果用手机发帖是登陆我的网站?如果是你,有什么好的思路呢?请问.

【spring boot】12.spring boot对多种不同类型数据库,多数据源配置使用

2天时间,终于把spring boot下配置连接多种不同类型数据库,配置多数据源实现! ====================================================================================================== spring boot对多种不同类型数据库,多数据源配置使用 多数据源配置相关官方API:https://docs.spring.io/spring-boot/docs/current/api/ 环境如下:

Java Spring中同时访问多种不同数据库

开发企业应用时我们常常遇到要同时访问多种不同数据库的问题,有时是必须把数据归档到某种数据仓库中,有时是要把数据变更推送到第三方数据库中.使用Spring框架时,使用单一数据库是非常容易的,但如果要同时访问多个数据库的话事件就变得复杂多了. 本文以在Spring框架下开发一个SpringMVC程序为例,示范了一种同时访问多种数据库的方法,而且尽量地简化配置改动. 搭建数据库 建议你也同时搭好两个数据库来跟进我们的示例.本文中我们用了PostgreSQL和MySQL. 下面的脚本内容是在两个数据库中

CentOS下无法正常获取MySQL数据库表数据的问题

之前,由于客户要求在centOS下安装系统应用,因此有机会接触了一下CentOS,顺便也了解了下CentOS的常规操作,还有在CentOS下的MySQL相关操作. 目前技术框架使用JSF(richfaces.facelets)+Spring+JPA(OpenJPA),不使用数据库依赖的触发器或存储过程,所有业务逻辑在web服务器上执行,因此数据库基本不用考虑移植问题.但是本来在windows下运行正常的系统,在linux下却没法获取一些表的内容.由于数据库的初始化,最初只是体现在几个需要手工维护