2017-02-16 171 views
1

我想使用HibernateH2,我希望模式自動創建。網上有很多例子,我的配置看起來很好,但它並沒有創建。以前我用它與MySQL並沒有任何問題。 H2是否有附加參數可以包含在任何地方?休眠 - 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設置爲true,我希望看到創建語句,但什麼也沒有發生,即沒有創建的模式。

我把我的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

是[this](http://stackoverflow.com/a/25156520/574975)的任何幫助? – jaivalis

+0

@jaivalis我的情況很簡單。我不知道這是否會有所幫助,但必須有更好的辦法。 – ram

回答

1

這個問題的原因是非常無關的!我寫在這裏,以防其他人也可能面對它,並花了半天的時間來處理這樣一件愚蠢的事情。

首先,我從H2更改爲Derby檢查,它工作。通過這種方式,我確信persistence.xml配置沒有問題。

在搜索日誌後,我意識到hibernate無法創建表,因爲KeywordTask實體的其中一個屬性爲limit,它是一個保留字! (記住我堅持一個實例的地方,並觀察setter的名字:setLimit。)更改屬性的名稱後,它的工作。