Testes usando H2 com problemas em relacionamento de tabelas

Ao fazer testes de integração usando o h2 tenho problemas com o relacionamento entre tabelas
por exemplo
Caused by: org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException: Referential integrity constraint violation: "FK87XVOT9EANH5GNQOG35NKOCM9: PUBLIC.EVENT FOREIGN KEY(IDENTIFIER) REFERENCES PUBLIC.IDENTIFIER(ID) (2)"; SQL statement:

então eu criei outro aquivo.sql com a tabela IDENTIFIER e os dados que ela possui.
E coloquei antes do arquivo.sql que estou usando para o teste, por exemplo:

@Sql({"/h2/eventcontrolleradmin_findAll_identifier.sql","/h2/eventcontrolleradmin_findAll_findByIdentifierId.sql"})

mas o erro continua

Caused by: org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException: Referential integrity constraint violation: "FK3NBK1C1O4YFRKMQ8IPXEPARKP: PUBLIC.EVENT FOREIGN KEY(STEP) REFERENCES PUBLIC.STEP(ID) (11)"; SQL statement:

Minhas dúvidas são, quando eu uso o H2, nos arquivos.sql devo fazer somente um insert into e colocar os valores na tabela ou devo dar um create table e criar a tabela?
Como faço com o relacionando das tabelas nesse caso?

Desde já agradeço pessoal, abraços!!

Vc tem que criar o schema do banco da mesma forma como a aplicação usa. Se há uma tabela com uma FK de outra, essa outra tabela deve existir no H2 para não ocorrer esses erros de constraint. Porém, vc consegue desabilitar as constraints nos scripts executados no H2.

Coloque isso no início do script:

SET REFERENTIAL_INTEGRITY FALSE;

e depois habilite novamente no final do script:

SET REFERENTIAL_INTEGRITY TRUE;

Já usei esse esquema para evitar ter que criar várias tabelas no H2 sem necessidade soh por conta dos relacionamentos e funcionou de boas.

Boa tarde Lucas

Cara me ajudou muito!! Setando false e true para o referential_integrity.
Muito obrigado!!

1 curtida