Hibernate初入门4--hbm2ddl

在hibernate的配置文件中,存在如下一段代码!!

1 <!-- Drop and re-create the database schema on startup -->
2  <property name="hbm2ddl.auto">create/create-drop/update/validate</property>

在学习当中,完全不知道其中属性标签的值所代表的含义!!标签值有如下四种:

(1)create

(2)create-drop

(3)update

(4)validate

---------------------------------------------------------------------------------------

(1)当其中属性值为create时

1  <!-- Drop and re-create the database schema on startup -->
2  <property name="hbm2ddl.auto">create</property>

运行前:

运行结果如下:

分析可知:当参数为create时,hibernate将会作出判断,判断是否存在需要操作的表。如果存在则将表删除再重新创建,否则则直接创建。(之所以存在Student、Teacher表是因为在实验前,已在配置文件中添加了Student、Teacher的映射,所以会对Student、Teacher表做操作)

运行后:

(2)当属性值为Create-drop时,测试结果如下(先将Employee表删除)

运行前:

运行结果:

分析可知:create-drop与create具有相同特性,在运行时都会检测数据库中是否存在需要操作的表,如果存在则删除重建,不存在则直接新建;

但通过显示数据库中的表可知,在程序运行结束后,前面所重建或新建的表也会随着程序结束而被删除。

运行后:

(3) 当属性值为update时

运行前:

运行结果如下:

运行后:

分析可知:当数据库中不存在需要操作的表时,hibernate会自动创建此表。

当增加一个属性wage 时(即添加一个字段)

运行结果:

运行后:

分析可知:当数据库中存在需要操作的表时,hibernate不会将原表删除。由新增加字段可知,之前插入的信息未被删除,所以可知当数据库中存在需要操作的表时,hibernate不会将其删除,只是在原表的基础上修改。

当减少一个字段并修改另一字段类型时

运行结果:

运行后:

分析可知:当删除字段时,新插入的数据不具备已删除字段,在表中以null形式表示只是为了不影响之前插入的数据,故在此字段上显示为null(通过select * from employee where branch=""; 结果可以得出),即删除字段时所插入的数据不具备所删除的字段。

分析可知:当插入数据时,数据表仍具备删除的字段,因而再后续插入数据的过程中,需要加入删除的字段。

分析可知:修改字段类型时所插入的数据与原数据存在字符相同时,通过查找方式无法找出。

但是,问题又来了,如下测试!!又与此结论不同了,求高手解释!!

最终结论:只是根据映射文件去和数据库中的表对应起来,如果不一致,就更新表的结构,所以出现如此之多的前后矛盾。

当属性值为validate时

运行后:

分析:坑爹,解释不了了!!!求看到的大婶解释解释!!目测跟update的很像。

别人的结论:校验映射文件和数据库中的表是不是能对应起来,不能对应报错,实际中常用(没看懂)

时间: 2024-12-24 16:16:01

Hibernate初入门4--hbm2ddl的相关文章

hibernate初入门3--hibernate的简易实现

对hibernate的几天学习大概了解了hibernate的工作原理,本着作为程序员的严谨(为了记忆而已),在此就重现hibernate简易实现的全过程!! 首先,我们知道hibernate是符合ORM对象关系映射的!!所以我们从测试类出发,默认简易的hibernate已实现: 代码如下 1 package com.hibernate.Exp150705; 2 3 import org.junit.Test; 4 5 public class TestDemo { 6 7 8 @Test 9 p

hibernate初入门2--Annotation

零基础接触hibernate,在学习的过程中接触到了Annotation(翻译过来“注释”).在学习过程中, 并不知道annotation怎么发展来的,但通过对比操作,发现了Annotation在编码中简化了对映射文件的编写(虽然很大程度上是copy过来的)!!话不多上,直接将编码过程贴上(菜鸟,写不出高大上的东西,此乃无奈之举)!! 创建数据库 创建实体类Teacher.java 1 package com.hibernate.Exp150704; 2 3 import javax.persi

Hibernate初入门1

刚开始接触hibernate,顿时对ORM(对象关系映射 Object Relational Mapping )有了几分崇拜之情,但心也是够累的!!不说太多,直接贴图!! 看到这里,内心也是崩溃的!!一万只尼玛奔过,过时的方法不能用(能力问题,没看懂异常)?!!! 通过千百次的测试,尼玛,网上的资料也太不负责了!!直接copy的hibernate.cfg.xml竟然是错的!!这尼玛<hibernate-configuration>标签也害的我挣扎了那么久!! 1 <?xml versio

Hibernate框架入门

导读 本文主要介绍hibernate的入门,主要包括以下内容:hibernate介绍.hibernate环境搭建.hibernate简单测试.测试涉及的api详解. 一.hibernate介绍 JDBC是Java操作数据库的工具,我们可以使用jdbc来书写并执行sql语句来操作数据库,对于普通的业务,jdbc工具是完全可以胜任的,但但当任务复杂,特别是数据库中表格很多的时候,jdbc就会显得力不从心,代码复用率低且sql语句容易出错. Hibernate框架从jdbc面向过程操作数据库的过程转变

SpringBoot 初入门

SpringBoot 初入门 关于介绍什么之类的就不讲了,主要做一下学习记录. 1. 启动方式 IDEA 启动 命令行启动: mvn spring-boot:run 部署到服务器启动: 先进行打包, mvn clean package 移动到项目的 target 目录下,可以看到一个后缀名为 jar 的文件,便是刚刚我们打包的 jar 包, 使用命令行启动: java -jar target/luckymoney-0.0.1-SNAPSHOT.jar 传参方式启动: java -jar -Dsp

JSON初入门

JSON:Javascript Object Notation 轻量级的数据交换格式 语法规则:(js对象表示语法的子集) 1.数据在名称/值对中 2.数据由逗号分隔 3.花括号{}保存对象 4.中括号[]保存对象 JSON名称/值 数据书写格式:名称/值 包括字段名称(双引号""),中间:隔开 "firstName":"John"     易理解,相当于js中  firstName="John" JSON值 数字(整数/浮点

Spring MVC注解配置结合Hibernate的入门教程及其代码实例

原文:Spring MVC注解配置结合Hibernate的入门教程及其代码实例 源代码下载地址:http://www.zuidaima.com/share/1787210045197312.htm 1.概述 本文旨在搭建Spring MVC+Hibernate开发框架,通过一个简单的demo讲解Spring MVC的相关配置文件,以及通过注解方式实现简单功能. 开发框架:Spring+Spring MVC+Hibernate(Spring所用的版本为3.0.5). 数据库:MySQL(数据库名称

mybatis初入门

昨天刚接触mybatis,感觉吧. 对于我这个菜鸟来说,能学什么就是什么,完全没有感觉... 还是说说mybatis吧. mybatis的配置xml,实体类,dao. configuration.xml <?xml version="1.0" encoding="UTF-8" ?>      <!DOCTYPE configuration          PUBLIC "-//mybatis.org//DTD Config 3.0//E

【C#Windows 服务】 《一》初入门

[C#Windows 服务] <一>初入门 一.工具: VS2015+NET Framework4.5. 二.操作: 1.新建windows服务的项目: 2.修改windows服务相关内容: 3.预览windows服务代码结构: 4.windows服务生成与发布: 三.代码: 1.测试代码: using ClassLibrary1; using System; using System.Collections.Generic; using System.ComponentModel; usin