Bra*_*ugh 17 java spring unit-testing test-data hibernate
我有一个Spring/Hibernate webapp,它有一些在内存中的HSQL数据库上运行的集成测试.由于hbm2ddl = create,Hibernate使用这个空白数据库并创建我的所有测试表和约束.但是,我有一个新的bean,它在afterPropertiesSet()方法期间检查数据库中的特定配置值,因此当初始化此bean时,数据库中需要存在这样的行.
有没有什么好方法可以设置相当于Rail的测试夹具的Java/Spring/Hibernate?我试图找到一种方法告诉Hibernate"无论何时创建此表,然后立即插入这些行".我找不到可以添加的回调或钩子,但也许还有另一种方式.
Pas*_*ent 27
我试图找到一种方法告诉Hibernate"无论何时创建此表,然后立即插入这些行"
从Hibernate 3.1开始,您可以包含import.sql
在Hibernate的运行时类路径中调用的文件,并且在模式导出时,Hibernate将在导出模式后执行该文件中包含的SQL语句.
此功能已在鹿特丹JBug和Hibernate的import.sql博客文章中公布:
import.sql:轻松导入单元测试中的数据
Hibernate有一个整洁的小功能,严重缺乏记录和未知.您可以在
SessionFactory
生成数据库模式之后立即执行SQL脚本,以在新数据库中导入数据.您只需要添加一个import.sql
在类路径根目录中命名的文件,并将其设置为create
或create-drop
作为您的hibernate.hbm2ddl.auto
属性.现在我已经开始查询章节了,我将它用于Hibernate Search in Action.它使用一组新的数据为我的单元测试初始化我的数据库.JBoss Seam在各种示例中也使用了很多.
import.sql
是一个非常简单的功能,但在时间上非常有用.请记住,SQL可能依赖于您的数据库(可移植性啊!).Run Code Online (Sandbox Code Playgroud)#import.sql file delete from PRODUCTS insert into PRODUCTS (PROD_ID, ASIN, TITLE, PRICE, IMAGE_URL, DESCRIPTION) values ('1', '630522577X', 'My Fair Lady', 19.98, '630522577X.jpg', 'My Fair blah blah...'); insert into PRODUCTS (PROD_ID, ASIN, TITLE, PRICE, IMAGE_URL, DESCRIPTION) values ('2', 'B00003CXCD', 'Roman Holiday ', 12.98, 'B00003CXCD.jpg', 'We could argue that blah blah');
有关此功能的更多信息,请查看Eyal的博客,他写了一篇很好的小条目.请记住,如果要添加其他数据库对象(索引,表等),还可以使用辅助数据库对象功能.
它仍然没有真正记录.
在hibernate 3.6中,允许运行任意sql命令的配置是:
hibernate.hbm2ddl.import_files
请参阅http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/,注意文档中存在错误:属性为import_files,最后带有s.