无论我把它放在哪里都找不到Hibernate import.sql

时间:2014-11-07 11:11:51

标签: spring hibernate maven tomcat jpa

我在maven上使用Spring MVC + JPA / Hibernate配置。 当我部署到Tomcat时,我希望Hibernate执行一个import.sql文件,但无论我把它放在哪里或者我如何配置文件的路径都没关系,它永远不会找到它。

org.hibernate.tool.hbm2ddl.SchemaExport SchemaExport - HHH000227: Running hbm2ddl schema export
org.hibernate.tool.hbm2ddl.SchemaExport SchemaExport - Import file not found: /META-INF/import.sql

我在Hibernate中的配置是在Spring:

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    ...
    <property name="jpaProperties">
        <props>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.hbm2ddl.auto">create-drop</prop>
            <prop key="hibernate.hbm2ddl.import_files">/META-INF/import.sql</prop>
        </props>
    </property>
</bean>

我正在使用标准的Maven Web文件夹结构,将import.sql放在/src/main/webapp/WEB-INF/文件夹中。我也尝试删除import_files属性并将其放在webapp文件夹中无效。

我怀疑它可能与针对web.jar映射server_root/web/*网址的tomcat政策有关。

2 个答案:

答案 0 :(得分:12)

从类路径的根读取import.sql。在maven项目中,src/main/webapp不是类路径,而是Web内容。类路径由src/main/java中的java类和src/main/resources中的附加非Java内容组成。

import.sql放入src/main/resources会让hibernate加载它。在构造jar时,此目录的内容将复制到WEB-INF/classes,这在Web应用程序中是类路径的一部分。

答案 1 :(得分:1)

如果您只需要更改该位置,则可以设置此属性

hibernate.hbm2ddl.import_files

默认为

hibernate.hbm2ddl.import_files="/import.sql"

要加载多个sql文件,只需用逗号分隔它们,比如

hibernate.hbm2ddl.import_files="/scripts/business.sql,/scripts/security.sql"

问候!