hibernate.hbm2ddl.import_files_sql_extractor
这个配置项用于补充这篇文章:
http://blog.csdn.net/stefwu/article/details/10584161
在这篇文章中,我们提到,如果使用了自己的SQL文件,在SQL文件中的SQL就只能是一条SQL一行,不能格式化。如果你的SQL是格式化了的,或者在你的SQL里面甚至有特殊的内容需要处理之后才能执行,那么你只需要配置一个hibernate.org.hibernate.tool.hbm2ddl.MultipleLinesSqlCommandExtractor就可以了。这个配置需要一个ImportSqlCommandExtractor接口的实现(这个接口其实是一个Service,关于Service是hibernate4的一个非常重要的改变,后面再慢慢介绍),这个接口的作用就是用于从Reader里面解析出一条一条能够直接执行的SQL命令。
在hibernate提供了两个默认的ImportSqlCommandExtractor:一个是MultipleLinesSqlCommandExtractor,一个是SingleLineSqlCommandExtractor,从名字上面就能很明显的看到,一个可以用于解析SQL分散到多行的情况,一个只能用于解析单行的SQL,默认情况下hibernate使用的是:SingleLineSqlCommandExtractor:
public class ImportSqlCommandExtractorInitiator implements BasicServiceInitiator<ImportSqlCommandExtractor> { public static final ImportSqlCommandExtractorInitiator INSTANCE = new ImportSqlCommandExtractorInitiator(); public static final ImportSqlCommandExtractor DEFAULT_EXTRACTOR = new SingleLineSqlCommandExtractor();
可以很清楚的看到,DEFAULT_EXTRACTOR是SingleLineSqlCommandExtractor。
所以,如果要能够导入多行的SQL,只需要配置:
hibernate.hbm2ddl.import_files_sql_extractor=org.hibernate.tool.hbm2ddl.MultipleLinesSqlCommandExtractor
就可以了。