2017-02-16 23 views
1

Я хочу использовать Hibernate с H2, и я хочу, чтобы схема была создана автоматически. Есть много примеров в Интернете, и мои конфигурации кажутся прекрасными, но они не созданы. Раньше я использовал его с MySQL и не имел никаких проблем. Существуют ли дополнительные параметры, которые должны быть включены в любом месте для H2?Hibernate - H2 база данных не создана

Моя настойчивость единица определяется в persistence.xml следующим образом:

<persistence-unit name="some.jpa.name" 
    transaction-type="RESOURCE_LOCAL"> 

    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> 
    <!-- tried with and without class property 
    <class>some.package.KeywordTask</class>  
    --> 
    <properties> 
     <property name="javax.persistence.jdbc.driver" value="org.h2.Driver" /> 
     <property name="javax.persistence.jdbc.url" value="jdbc:h2:./test" /> 
     <property name="javax.persistence.jdbc.user" value="" /> 
     <property name="javax.persistence.jdbc.password" value="" /> 
     <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect" /> 
     <property name="hibernate.hbm2ddl.auto" value="create" /> 
     <property name="show_sql" value="true" /> 
    </properties> 

</persistence-unit> 

Поскольку show_sql устанавливается истина, я ожидаю увидеть создать заявления, но ничего не происходит, то схема не создается.

Я держу мой EntityManagerFactory как finalstatic переменной:

public static EntityManagerFactory emf = Persistence.createEntityManagerFactory("some.jpa.name"); 

В каком-то месте в моем коде, я пытаюсь упорствовать сущность:

EntityManager em = emf.createEntityManager(); 
em.getTransaction().begin(); 
KeywordTask task = new KeywordTask(); 
task.setKeyword(keywordTask.getKey()); 
task.setLimit(keywordTask.getValue()); 
em.persist(task); 
em.getTransaction().commit(); 
em.close(); 

Это кидает исключение с кодом причины:

org.h2.jdbc.JdbcSQLException: Table "KEYWORDTASK" not found; 

, который ожидается, так как t он не создан.

Как я могу создать схему?

+0

Есть ли [это] (http://stackoverflow.com/a/25156520/574975) какой-либо помощи? – jaivalis

+0

@jaivalis Мое дело довольно простое. Я не знаю, может ли это помочь, но должен быть лучший способ. – ram

ответ

1

Причина этой проблемы была совершенно не связана! Я пишу это здесь, если другие ребята тоже могут столкнуться с этим, и потратьте полдня на такую ​​глупость.

Во-первых, я изменил с H2 на Derby, чтобы проверить, и это сработало. Таким образом, я был уверен, что нет проблем с конфигурацией persistence.xml.

После поиска по журналам я понял, что спящий режим не смог создать таблицу, поскольку одно из свойств объекта KeywordTask было limit, и это зарезервированное слово! (Помните место, где я сохраняю экземпляр и наблюдаю за именем установщика: setLimit.) После изменения имени свойства он сработал.