2017-02-16 121 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。)更改属性的名称后,它的工作。