Java Hibernate-未创建H2数据库
我希望将Java Hibernate-未创建H2数据库,java,hibernate,h2,Java,Hibernate,H2,我希望将Hibernate与H2一起使用,并希望自动创建模式。网上有很多例子,我的配置看起来不错,但它不是创建的。以前我将它与MySQL一起使用,没有任何问题。H2的任何位置是否包含其他参数 我的持久化单元在persistence.xml中定义如下: <persistence-unit name="some.jpa.name" transaction-type="RESOURCE_LOCAL"> <provider>org.hibernate.jpa.H
Hibernate
与H2
一起使用,并希望自动创建模式。网上有很多例子,我的配置看起来不错,但它不是创建的。以前我将它与MySQL一起使用,没有任何问题。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>
在我的代码中的某个地方,我试图持久化一个实体:
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;
这是预期的,因为未创建架构
如何创建模式?此问题的原因与此无关!我在这里写这封信,以防其他人也会面对它,花半天时间做这样一件蠢事 首先,我将
H2
更改为Derby
以进行检查,并且工作正常。通过这种方式,我确信persistence.xml
配置没有问题
在搜索日志之后,我意识到hibernate无法创建表,因为
关键字任务
实体的属性之一是限制
,它是一个保留字!(还记得我保存一个实例并观察setter名称的地方:setLimit
)更改属性名称后,它工作了。有什么帮助吗?@jaivalis我的情况很简单。我不知道这是否有帮助,但一定有更好的办法。
org.h2.jdbc.JdbcSQLException: Table "KEYWORDTASK" not found;