Teste de primavera/hibernato: Inserção de dados de teste após a criação do DDL
-
25-09-2019 - |
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.
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 chamadoimport.sql
na sua raiz de classe de classe e definacreate
oucreate-drop
como seuhibernate.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.