本文作者:苏生米沿
本文地址:[http://blog.csdn.net/sushengmiyan/article/details/50445936](http://blog.csdn.net/sushengmiyan/article/details/50445936)
你可以将如下三种类型的脚本绑定到hibernate的schema生成程序中:
1.当schema生成的时候,创建脚本create就会执行。一个自定义的创建脚本可以在hibernate自动生成脚本之前,之后,甚至可以直接替换。换句话说,你可以写一个SQL脚本,这个脚本从你的映射元数据中在hibernate生成表、约束之前或之后运行。
2.Drop语句,在hibernate移除schema的时候执行。像create脚本一样,drop语句可以在自动生成之前之后或者直接替换hibernate的自动生成语句。
3.Load语句,总是在hibernate生成schema之后才去执行,作为生成的最后一步,它的主要目的就是导入你的程序运行之前的测试或者主数据。它可以包括任何形式的SQL语句,包括想alter这样的DDL语句,如果你想进一步优化自定义你的schema的话。
这个自定义已经是事实上的标准了,你可以使用JPA的persistence.xml来配置这个持久化单元属性。
①.默认情况下,hibernate期望一个SQL语句占一行。启用多行语句就靠第一个转换了。你可以实现自己的org.hibernate.tool.hbm2ddl.ImportSqlCommondExtractor 如果你想要根据你自己的不同的方式来处理SQL脚本的话。
②.这个属性定义了何时你创建或者销毁脚本会被调用。你自定义的脚本将会包括CREATE DOMAN语句,它必须要在表创建使用这些DOMAIN的之前被创建。有了这些设置,schema生成器就在ORM元数据读取之前执行这个创建语句。Drop语句就是在hibernatedrop表的时候给你了一个清楚你创建的数据的机会。
③.这是SQL脚本的位置,路径是从classpath开始算的。
④.这是drop语句的位置所在。
⑤.这个脚本在表创建之后执行。
我们提及过,DDL是跟产品特性挂钩的,如果你的产品支持多种数据源,你就需要设置各种的方言。你可以通过多个持久化单元的方式来解决这个问题。