我在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政策有关。
答案 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"
问候!