休眠 - H2数据库未创建
问题描述:
我想使用Hibernate
和H2
,我希望模式自动创建。网上有很多例子,我的配置看起来很好,但它并没有创建。以前我用它与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
作为final
static
变量:
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他的架构不会被创建。
如何获取创建的模式?
答
这个问题的原因是非常无关的!我写在这里,以防其他人也可能面对它,并花了半天的时间来处理这样一件愚蠢的事情。
首先,我从H2
更改为Derby
检查,它工作。通过这种方式,我确信persistence.xml
配置没有问题。
在搜索日志后,我意识到hibernate无法创建表,因为KeywordTask
实体的其中一个属性为limit
,它是一个保留字! (记住我坚持一个实例的地方,并观察setter的名字:setLimit
。)更改属性的名称后,它的工作。
是[this](http://*.com/a/25156520/574975)的任何帮助? – jaivalis
@jaivalis我的情况很简单。我不知道这是否会有所帮助,但必须有更好的办法。 – ram