java - Hibernate - H2 数据库未创建

标签 java hibernate h2

我想将 HibernateH2 结合使用,并且希望自动创建架构。网上有很多例子,我的配置看起来不错,但没有创建。之前我将它与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>

由于 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;

这是预期的,因为架构尚未创建。

如何创建架构?

最佳答案

这个问题的原因完全无关!我写在这里是为了防止其他人也遇到这个问题,并花半天时间做这样的愚蠢的事情。

首先,我从 H2 更改为 Derby 进行检查,结果成功了。这样我就确定了persistence.xml配置没有问题。

搜索日志后,我意识到 hibernate 无法创建该表,因为 KeywordTask 实体的属性之一是 limit,而且它是一个保留字! (记住我保存实例的位置并观察 setter 的名称:setLimit。)更改属性名称后,它起作用了。

关于java - Hibernate - H2 数据库未创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42279617/

相关文章:

java - 关于 hibernate 缓存

java - java中hibernate使用的java列表接口(interface)的语法?

java - 计算 H2 数据库中的重复行数

java - Android ImageView 布局问题

java - 无法写入内容: failed to lazily initialize a collection of role using OpenEntityManagerInViewFilter

playframework - Play Framework : How do I change the sort order of my database?

sql - 避免多对多表中的可空外键

java - arrayList 和 Object 数组的不同类型的错误

java - 在android应用程序中获取当前时区

java - REGEX,删除空格和所有其他字符