【发布时间】:2014-08-21 21:25:45
【问题描述】:
通过Spring Boot reference manual,我们可以通过多种方式在应用程序启动时导入数据。结合内存数据库,这对于测试来说相当方便。
选项是创建一个名为 import.sql 的文件,它将被 Hibernate 拾取,或者创建一个名为 data.sql 的文件,它将被 Spring JDBC 拾取。这两个对我来说都很好。
但是,我喜欢将我的项目分解一下,所以我目前有一个核心域模型,其中有一些方便的导入来配置一些用户等核心数据,这些数据在任何地方都可以使用。我也有特定于函数的项目,在这些项目中重复使用相同的基础数据导入很有用,但也导入了一些特定于该函数的附加数据。
这就是事情不太顺利的地方。
我找到了an answer to a previous question,其中 Pascal Thivent 提到 hibernate.hbm2ddl.import_files 属性可用于定义文件列表,从 Hibernate 3.6.0.Beta1 开始。鉴于我的项目正在导入 4.3.1.Final,我认为这可能会可用。
所以我尝试将以下内容添加到我的 Spring Boot application.properties:
spring.jpa.hibernate.hbm2ddl.import_files=/another-import.sql
和:
hibernate.hbm2ddl.import_files=/another-import.sql
很遗憾,这些都不会导致导入运行。
所以我想知道我是不是把上面的属性弄得一团糟(很可能)。或者我还有什么需要做的吗?
请注意,作为一种解决方法,我发现 Spring JDBC 似乎在 Hibernate 运行 import.sql 之后运行 data.sql。因此,只要我不需要两个以上的导入,我就可以将import.sql 用于基础数据,然后将特定于项目的导入放入data.sql。我可以解决这个问题,但这并不是真正的解决方案。
【问题讨论】:
-
您是在定义自己的 jpaProperties 和 entityManagerFactory bean,还是使用默认的魔法?
-
这只是默认魔法。 :)
-
使用
spring.jpa.properties.hibernate.hbm2ddl.import_files。有关属性列表,请参阅reference guide。如果您想要多个资源,只需为spring.datasource.data和/或spring.datasource.schema使用一个通用的分隔列表(默认分别为data和schema。或者您可以提出一个命名约定并将表达式放在那里@例如 987654339@。
标签: hibernate spring-boot