Pergunta

Eu tenho um WebApp de primavera/hibernato que possui alguns testes de integração que são executados em um banco de dados HSQL na memória. O Hibernate pega esse banco de dados em branco e cria todas as minhas tabelas e restrições de teste graças ao HBM2DDL = CREATE. No entanto, tenho um novo feijão que verifica um valor de configuração específico do banco de dados durante o método AfterPropertiESEST () e, portanto, quando esse feijão é inicializado, essa linha precisa existir no banco de dados.

Existe alguma boa maneira de configurar um equivalente a Java/Spring/Hibernate dos acessórios de teste da Rail? Estou tentando encontrar uma maneira de contar a Hibernate "sempre que você criar esta tabela, insira essas linhas imediatamente depois". Não consegui encontrar um retorno de chamada ou um gancho que eu poderia acrescentar, mas talvez haja outra maneira.

Foi útil?

Solução

Estou tentando encontrar uma maneira de dizer ao Hibernate "sempre que você criar esta tabela, insira essas linhas imediatamente depois"

Desde o Hibernate 3.1, você pode incluir um arquivo chamado import.sql No caminho de execução do Hibernate e no momento da exportação de esquema, o Hibernate executará as instruções SQL contidas nesse arquivo após a exportação do esquema.

Este recurso foi anunciado no Roterdam Jbug e Hibernate's Import.SQL Postagem do blog:

Import.SQL: importar facilmente dados em seus testes de unidade

O Hibernate tem uma pequena característica interessante que é fortemente pouco documentada e desconhecida. Você pode executar um script SQL durante o SessionFactory Criação logo após a geração de esquema do banco de dados para importar dados em um novo banco de dados. Você só precisa adicionar um arquivo chamado import.sql na sua raiz de classe de classe e defina create ou create-drop como seu hibernate.hbm2ddl.auto propriedade.

Eu o uso para a pesquisa de hibernação em ação agora que iniciei o capítulo da consulta. Ele inicializa meu banco de dados com um novo conjunto de dados para meus testes de unidade. O JBoss Seam também o usa muito nos vários exemplos. import.sql é um recurso muito simples, mas é bastante útil no momento. Lembre -se de que o SQL pode depender do seu banco de dados (portabilidade AH!).

#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');

Para mais informações sobre esse recurso, verifique Blog de Eyal, ele escreveu uma pequena entrada sobre isso. Lembre -se de que você deseja adicionar objetos adicionais de banco de dados (índices, tabelas e assim por diante), também pode usar o recurso Objetos de banco de dados auxiliares.

Ainda não está realmente documentado.

Outras dicas

No Hibernate 3.6, a configuração que permite executar comandos SQL arbitrários é:

hibernate.hbm2ddl.import_files

Ver em http://docs.jboss.org/hibernate/core/3.6/reference/en-us/html_single/, percebendo que há um erro na documentação: a propriedade é import_files, com um s no final.

Se você está falando sobre testes Junit e usando AbstractTransactionAdataSourcespringContextTests há métodos que você pode substituir como onsetupBeforeTransaction que fornecem um gancho para pré-preencher dados da tabela de teste etc.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top