当前位置: 首页 > 面试题库 >

在内存数据库中将Hibernate与H2一起使用时出错

狄玉书
2023-03-14
问题内容

我正在使用Hibernate。如何配置persistence.xml以具有H2内存数据库?

我的 persistence.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>

但是,当我运行我的应用程序时,出现以下 错误

Internal Exception: org.h2.jdbc.JdbcSQLException: Table "EMPLOYEE" not found; SQL statement: SELECT ID, NAME, DEPARTMENT_ID FROM EMPLOYEE [42102-171] Error Code: 42102 Call: SELECT ID, NAME, DEPARTMENT_ID FROM EMPLOYEE Query: ReadAllQuery(referenceClass=Employee sql="SELECT ID, NAME, DEPARTMENT_ID FROM EMPLOYEE")


问题答案:

您应该在第一次运行应用程序时将hibernate.hbm2ddl.auto属性设置为“ create”,以创建表

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

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

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

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

<property name="hibernate.connection.url" value="jdbc:h2:~/<filename>;INIT=CREATE SCHEMA IF NOT EXISTS <schema_name>" />


 类似资料:
  • 我在用Hibernate。如何配置我的persistence.xml以拥有一个H2内存数据库? 我的坚持。xml是: 但是当我运行我的应用程序时,我收到以下错误:

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

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

  • 我想使用h2作为数据库,在内存模式下准确保存数据。 所以我有一个应用程序。属性文件,配置如下: 使用特定参数: -保持数据库打开/保持内存中数据库的内容,只要虚拟机是活动的 -禁用数据库关闭退出 如H2数据库文档所述。 同时,我使用实体保存在数据库中: 发送请求后,我将从Hibernate状态获取控制台信息: 但在使用组合键Ctrl/kbd>F5或通过以下方式刷新数据源中的数据库之后: 凯,我没有

  • 问题内容: 2 能否从2个不同的mongdb数据库服务器中检索数据? 问题答案: 更新资料 现在可以连接到远程/多个数据库: mongodb url 在哪里,例如(带有数据库名称) 目前,这样做有一个缺点:没有Oplog 旧答案 目前,这是不可能的。每个流星应用程序都绑定到一个数据库。 您可以通过几种方法解决此问题,但其价值可能会更复杂: 一种选择-使用单独的Meteor应用 在另一个流星应用程序

  • 问题内容: 我正在寻找一种将二进制数据流传输到数据库或从数据库流传输二进制数据的方法。如果可能的话,我希望使用Hibernate来完成(以与数据库无关的方式)。我发现的所有解决方案都涉及将字节数据作为byte []显式或隐式加载到内存中。我要避免它。假设我希望我的代码能够使用不超过256Mb的内存将数据库中的2GB视频(存储在BLOB列中)写入本地文件,或者以其他方式将其写入本地文件。这显然是可以