我有一个 Spring/Hibernate Web 应用程序,它有一些在内存 HSQL 数据库上运行的集成测试。Hibernate 使用这个空白数据库并通过 hbm2ddl=create 创建我的所有测试表和约束。但是,我有一个新的 bean,它在 afterPropertiesSet() 方法期间检查数据库中的特定配置值,因此当初始化此 bean 时,数据库中需要存在这样的行。

有没有什么好方法来设置与 Rail 的测试装置等效的 Java/Spring/Hibernate?我试图找到一种方法来告诉 Hibernate“每当您创建此表时,请立即插入这些行”。我找不到可以添加的回调或挂钩,但也许还有另一种方法。

有帮助吗?

解决方案

  

我试图找到一种方式让Hibernate“只要你创建该表,插入这些行之后立即”

由于休眠3.1,您可以包含一个名为import.sql在Hibernate中的运行时类路径和模式导出的文件时,Hibernate将执行包含在该文件中的架构已出口后的SQL语句。

此功能已在鹿特丹JBug和Hibernate的import.sql 博客文章宣布>
  

import.sql:在单元测试中容易导入数据

     

Hibernate有一个整洁的小特征   这在很大程度上下,记录并   未知。您可以执行一个SQL脚本   在SessionFactory创建过程中   数据库模式之后   一代又在一个新的进口数据   数据库。你只需要添加一个文件   在classpath命名import.sql   根和集要么create或   create-drop为您   hibernate.hbm2ddl.auto属性。

     

我用它的休眠搜索在   现在采取行动,我已经开始   查询章节。它初始化我   数据库,支持一组新数据   我的单元测试。 JBoss Seam的也使用它   很多在各种实例。   import.sql是一个非常简单的功能   但在时间非常有用。记得   该SQL可能是依赖于   你的数据库(可移植性啊!)。

#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的博客,他   写一个关于它的可爱的小项。   请记住,如果你想添加额外的   数据库对象(索引,表和   等等),你也可以使用辅助   数据库对象特征。

有还没有真正记录。

其他提示

在冬眠3.6,其允许运行任意SQL命令的配置是:

hibernate.hbm2ddl.import_files

请参阅在 http://docs.jboss.org /hibernate/core/3.6/reference/en-US/html_single/ 时,注意到有所述文档中的错误:属性是import_files,与端部一个s

如果您正在谈论 JUnit 测试并使用 AbstractTransactionalDataSourceSpringContextTests 你可以重写一些方法,比如 交易前设置 提供一个钩子来预填充测试表数据等。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top