Hibernate 配置详解(12) 其实我也不想用这么土的名字

发布时间:2017-3-23 18:24:53 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"Hibernate 配置详解(12) 其实我也不想用这么土的名字",主要涉及到Hibernate 配置详解(12) 其实我也不想用这么土的名字方面的内容,对于Hibernate 配置详解(12) 其实我也不想用这么土的名字感兴趣的同学可以参考一下。

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这个配置的加载过程。还有时候可以看到别人代码上面的注释,有的也是挺有爱的。

上一篇:C++内部数据类型和非内部数据类型
下一篇:【逆向】第一次逆向的小CM

相关文章

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。

好贷网好贷款