hibernate.hbm2ddl.import_files

这个配置用于在hibernate根据映射文件执行DDL之前,如果我们自己设置了要事先运行的SQL文件,hibernate就会先执行这些SQL文件。比如,在classpath下面任意创建一个SQL文件:ddl.sql,然后添加:

  create table CC(id bigint(19) primary key auto_increment,name varchar(255));

接着配置:

  #也可以写成/ddl.sql
  hibernate.hbm2ddl.import_files=ddl.sql

然后设置

  #设置为hibernate.hbm2ddl.auto=create-drop也行
  hibernate.hbm2ddl.auto=create

关于hibernate.hbm2ddl.auto请看这个文章:

http://blog.csdn.net/stefwu/article/details/10538385

再启动hibernate,就能看到在创建Hibernate管理的表之前,就已经创建好了CC这个表。

这个配置原理很简单了,说说注意的几个点:

1,这个配置是可以添加多个导入文件的,文件之间只需要使用逗号分隔即可;注意就是这些文件的执行是有顺序的,配置在前面的文件肯定先执行了;

2,这个配置如果不写,那么,相当于默认配置了一个/import.sql;

3,只有在hibernate.hbm2ddl.auto=create或者create-drop的时候才会先执行SQL文件,可以看下面代码:

在SessionFactoryImpl的构造方法里面:

  if ( settings.isAutoCreateSchema() ) {
   new SchemaExport( serviceRegistry, cfg )
   .setImportSqlCommandExtractor( serviceRegistry.getService( ImportSqlCommandExtractor.class ) )
   .create( false, true );
   }
   if ( settings.isAutoUpdateSchema() ) {
   new SchemaUpdate( serviceRegistry, cfg ).execute( false, true );
   }
   if ( settings.isAutoValidateSchema() ) {
   new SchemaValidator( serviceRegistry, cfg ).validate();
   }
   if ( settings.isAutoDropSchema() ) {
   schemaExport = new SchemaExport( serviceRegistry, cfg )
   .setImportSqlCommandExtractor( serviceRegistry.getService( ImportSqlCommandExtractor.class ) );
   }

4,文件寻找的路径是先寻找classpath,再找Environment类路径,再找加载Hibernate.jar的classLoad路径,可以看ConfigHelper里面的:

  public static InputStream getResourceAsStream(String resource) {
   String stripped = resource.startsWith("/") ?
   resource.substring(1) : resource;
  
   InputStream stream = null;
   ClassLoader classLoader = ClassLoaderHelper.getContextClassLoader();
   if (classLoader!=null) {
   stream = classLoader.getResourceAsStream( stripped );
   }
   if ( stream == null ) {
   stream = Environment.class.getResourceAsStream( resource );
   }
   if ( stream == null ) {
   stream = Environment.class.getClassLoader().getResourceAsStream( stripped );
   }
   if ( stream == null ) {
   throw new HibernateException( resource + " not found" );
   }
   return stream;
   }

5,默认情况下,放在SQL文件中的SQL语句,只能是一条SQL一行,不能格式化的。

再说说看代码的心情,其实有的时候看别人的代码可以发现其实还是会有一些小瑕疵可以博得一笑,有兴趣的可以看看hibernate.hbm2ddl.import_files这个配置的加载过程。还有时候可以看到别人代码上面的注释,有的也是挺有爱的。

Hibernate 配置详解(12) 其实我也不想用这么土的名字的更多相关文章

  1. Hibernate 配置详解(12) 补充

    hibernate.hbm2ddl.import_files_sql_extractor 这个配置项用于补充这篇文章: http://blog.csdn.net/stefwu/article/deta ...

  2. Hibernate 配置详解(9)

    hibernate.cache.use_structured_entries Hibernate文档上介绍,该属性是用于把对象以一种更易读的方式放到二级缓存中,这样,在对二级缓存进行监控的时候就更容易 ...

  3. Hibernate 配置详解(2)

    6) hibernate.session_factory_name: 配置一个JNDI名称,通过Configuration对象创建的SessionFactory会绑定到JNDI下该名称中.一般名字格式 ...

  4. Hibernate 配置详解(5)

    9) hibernate.batch_fetch_style: 该配置是hibernate4.2.0新添加的,使用这个设置可以配置hibernate在做batch-fetch的时候,生成SQL的策略. ...

  5. Hibernate 配置详解(8)

    hibernate.generate_statistics 这个配置大家应该都很熟悉,用于开启Hibernate统计信息,便于对Hibernate相关性能调试提供数据依据.在开发过程当中,可以把这个选 ...

  6. Hibernate 配置详解(7)

    hibernate.order_updates: Hibernate文档中提到,该配置用于在刷新一级缓存,提交UPDATE的时候,按照每类对象的主键顺序排序后再提交,可以在高并发情况下减少事务死锁的可 ...

  7. Hibernate 配置详解(11)

    hibernate.session_factory_name_is_jndi 配置hibernate.cfg.xml中SessionFactory的name属性是否作为JNDI名称绑定.默认是true ...

  8. hibernate二级缓存ehcache hibernate配置详解

    <!-----------------hibernate二级缓存ehcache------------------------->hibernate配置 <prop key=&quo ...

  9. Hibernate配置详解

    <!--标准的XML文件的起始行,version='1.0'表明XML的版本,encoding='gb2312'表明XML文件的编码方式--> <?xml version='1.0' ...

随机推荐

  1. PHP多线程的实现(PHP多线程类)

    通过WEB服务器来实现PHP多线程功能. 当然,对多线程有深入理解的人都知道通过WEB服务器实现的多线程只能模仿多线程的一些效果,并不是真正意义上的多线程. 但不管怎么样,它还是能满足我们的一些需要的 ...

  2. [置顶] woff格式字体怎么打开和编辑?

    如题! woff百度百科:http://baike.baidu.com/link?url=toS7yqpN9VlEcO2GOEp5JEA9-TeaZgIdVqTOv7iHshsNvk-V8HtxEY0 ...

  3. android 用 XML 自定义边框(只上下边框有色)

    直接上代码: <?xml version="1.0" encoding="UTF-8"?> <layer-list xmlns:android ...

  4. 【菜鸟学习Linux】-第一章-Linux环境搭建-安装VMware虚拟机

    本人菜鸟一个,刚毕业才上班2个月,现在用到Linux部署项目,这才开始学习Linux,以下是我在安装Linxu系统是遇到的一些问题,希望能给广大菜鸟们在学习的道路上提供帮助和指导,废话不多说!开工! ...

  5. Kali linux安装漏洞扫描工具Nessus指南

    引子:Nessus是著名信息安全服务公司tenable推出的一款漏洞扫描与分析软件,号称是"世界上最流行的漏洞扫描程序,全世界超过75,000个组织在使用它".虽然这个扫描程序能够 ...

  6. 菜鸟运维笔记:安装MySQL,PHP及phpMyAdmin

    转载请注明出处:http://blog.csdn.net/guodongxiaren/article/details/40684799 阿里云提示我备案,挺烦人的.前天通过github的学生开发包. ...

  7. asp.net 使用my97 datepicker实现前后两个日期的范围界定

    说明:日期选择后,前面的日期小于等后面的日期,后面的日期大于等于前面的日期.点点看就知道了:) - 这里将周末日期不可选.代码如下: <html xmlns="http://www.w ...

  8. iWeb峰会见闻

    8.16去参加了iWeb峰会,一大早8点过10分就到了,发现外面已经排起了长队(说明影响力越来越大,关注的人越来越多了.) 此次大会参与的企业也越来越多,当然是有目的而来~ 上午 google商业合作 ...

  9. English - because of,due to ,thanks to ,owing to ,as a result of ,on account of解析

    because of,due to ,thanks to ,owing to ,as a result of ,on account of 等都可以用来表示原因,但其用法却各有不同.下面就其用法分述如 ...

  10. AdventureWorks2008 数据库安装

    我使用的操作系统是 win 8.1,由于对早前安装的sql server 2008的兼容性不太好,要安装对应的service pack来解决一下这个问题. 如何使用 SQL Server 在 Wind ...