Creating schema from sql file looks OK, but tables are not found

Viewed 109

In persistence.xml I am creating a database (in-memory database for test) like this:

<persistence-unit name="TestDatabase" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
    <jar-file>pathToMyJar.jar</jar-file>
    <properties>            
        <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect" />
        <property name="javax.persistence.jdbc.url" value="jdbc:h2:mem:test" />
        <property name="javax.persistence.jdbc.driver" value="org.h2.Driver" />            
        <property name="hibernate.format_sql" value="true" />
        <property name="hibernate.show_sql" value="true" />
        <property name="hibernate.archive.autodetection" value="class, hbm" />
        <property name="javax.persistence.schema-generation.database.action" value="create"/>           
    </properties>
</persistence-unit>

That works as expected but is slow. So I saved a sql-script for schema generation like this:

<persistence-unit name="TestDatabase" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
    <jar-file>pathToMyJar.jar</jar-file>
    <properties>            
        <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect" />
        <property name="javax.persistence.jdbc.url" value="jdbc:h2:mem:test" />
        <property name="javax.persistence.jdbc.driver" value="org.h2.Driver" />            
        <property name="hibernate.format_sql" value="true" />
        <property name="hibernate.show_sql" value="true" />
        <property name="hibernate.archive.autodetection" value="class, hbm" />
        <property name="javax.persistence.schema-generation.database.action" value="create"/>  
        <property name="javax.persistence.schema-generation.scripts.action" value="create"/>
        <property name="javax.persistence.schema-generation.scripts.create-target" value="pathToSchemaGeneratonScript.sql"/>
    </properties>
</persistence-unit>

And then tried to use it like this:

<persistence-unit name="TestDatabase" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
    <properties>            
        <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect" />
        <property name="javax.persistence.jdbc.url" value="jdbc:h2:mem:test" />
        <property name="javax.persistence.jdbc.driver" value="org.h2.Driver" />            
        <property name="hibernate.format_sql" value="true" />
        <property name="hibernate.show_sql" value="true" />
        <property name="javax.persistence.schema-generation.database.action" value="create"/>            
        <property name="javax.persistence.schema-generation.create-source" value="script"/>            
        <property name="javax.persistence.schema-generation.create-script-source" value="pathToSchemaGeneratonScript.sql"/>
    </properties>
</persistence-unit>

Since show_sql is set to true I can see that the script runs, e.g "create table xxx (...". But no tables seems to exist, e.g:

entityManagerFactory = Persistence.createEntityManagerFactory("TestDatabase");
entityManager = entityManagerFactory.createEntityManager();
transaction = entityManager.getTransaction();
transaction.begin();
Query query = entityManager.createNativeQuery("insert into xxx (someColumns) values (someValues)");
query.executeUpdate();

Will result in "org.hibernate.engine.jdbc.spi.SqlExceptionHelper - Table "xxx" not found". I have connected manually and verified that the tables are not there. I also applied the generated sql file manually and then the tables are created as expected.

0 Answers
Related