当前位置: 首页 > 知识库问答 >
问题:

在内存数据库中对 H2 使用Hibernate时出错

龙繁
2023-03-14

我在用Hibernate。如何配置我的persistence.xml以拥有一个H2内存数据库?

我的坚持。xml是:

<?xml version="1.0" encoding="UTF-8" ?>
<persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
    version="2.0" xmlns="http://java.sun.com/xml/ns/persistence">
    <persistence-unit name="persistenceUnit"
        transaction-type="RESOURCE_LOCAL">

        <class>com.mastertheboss.domain.Employee</class>
        <class>com.mastertheboss.domain.Department</class>
        <properties>

            <property name="javax.persistence.jdbc.driver" value="org.h2.Driver" />
            <property name="javax.persistence.jdbc.url" value="jdbc:h2:mem:test;DB_CLOSE_DELAY=-1" />
            <property name="javax.persistence.jdbc.user" value="sa" />
            <property name="javax.persistence.jdbc.password" value="" />
            <property name="hbm2ddl.auto" value="update" />

            <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect" />
        </properties>

    </persistence-unit>
</persistence>

但是当我运行我的应用程序时,我收到以下错误:

内部异常:org.h2.jdbc.JdbcSQLException:找不到表"EMPLOYEE";SQL语句:SELECT ID, NAME,DEPARTMENT_IDFrom EMPLOYEE[42102-171]错误代码:42102调用:SELECT ID, NAME,DEPARTMENT_IDFrom EMPLOYEE查询:ReadAllQuery(参考类=员工sql="SELECT ID, NAME,DEPARTMENT_IDFrom EMPLOYEE")

共有1个答案

邵凯定
2023-03-14

应将Hibernate.hbm2ddl.auto 属性设置为在首次运行应用程序时“创建”,以创建表

<property name="hibernate.hbm2ddl.auto" value="create" />

然后(如果您不希望每次启动时都重新创建和清空表)将其设置为“validate”。

<property name="hibernate.hbm2ddl.auto" value="validate" />

要自动创建模式,请将if-not-exists添加到您的连接url中,如下所示:

<property name="hibernate.connection.url" value="jdbc:h2:~/<filename>;INIT=CREATE SCHEMA IF NOT EXISTS <schema_name>" />
 类似资料:
  • 问题内容: 我正在使用Hibernate。如何配置persistence.xml以具有H2内存数据库? 我的 persistence.xml 是: 但是,当我运行我的应用程序时,出现以下 错误 : 问题答案: 您应该在第一次运行应用程序时将hibernate.hbm2ddl.auto属性设置为“ create”,以创建表 然后(如果您不希望在每次启动时都重新创建和清空表)将其设置为“ valida

  • 我使用h2db进行测试,使用hibernate自动创建表,但希望flyway在数据库中插入脚本。所以,我的飞行路线没有创建脚本。 首先,我不确定这是否可能。但是当我使用一些插入脚本时,我的测试失败了,因为flyway无法插入记录,抱怨表格不存在。 似乎在h2创建表之前,它就已经在尝试运行脚本了。 我正在使用Spring靴来调用飞行路线。所以,我只需要这个依赖项和一个数据库。类路径中的migarat

  • 我正在inMemory数据库中插入数据,当插入数据时,我得到了一个问题, 使用boot、JPA、H2db在内存中插入数据的示例程序 > 创建Pojo并使用JPA注释进行注释 > 配置在app.prop:中 在data.sql文件中添加了给定表 为data.sql中提到的转换添加了名称。 在哪里配置;在Springboot中? 波乔 控制器 错误原因:对名为'in memorydatabaseShu

  • 问题内容: 我有一个H2数据库文件,名为“ test.db”。该文件位于我的应用程序目录中:“ myApp / resources / test.db”。我无法为我工作,所以引用相对路径的正确方法是什么? 这是我的hibernate.cfg.xml的配置。 发生错误的是: 问题答案: 您应该将URL编写为明确的相对路径:

  • 我想使用JavaFx、Spring Boot和Spring Data JPA制作一个桌面应用程序,并将H2作为我的数据库。问题是我试图运行JUnit以将数据保存在本地目录中,但每次运行JUnit时数据都会丢失。 我的文件; 我的测试用例; 打印列表的大小是1,但当我再次像这样运行测试用例时 它打印的列表大小为0

  • Hibernate无法验证由flyway迁移创建的数据库模式。(数据库迁移脚本是正确的)这是因为内存中的H2数据库吗?看起来hibernate和flyway连接到不同的数据库。 复制步骤: 用h2,flyway和jpa (hibernate)创建spring-boot项目。 应用属性: 示例实体: V1__init.sql脚本: 预期应用程序运行失败:完整日志: 我尝试了:显式命名内存数据库,显式