【问题标题】:H2 database console: how to connect to an embedded H2 JPA database?H2 数据库控制台:如何连接到嵌入式 H2 JPA 数据库?
【发布时间】:2020-04-12 03:56:17
【问题描述】:

我有几个针对应用程序 JPA 层的单元测试。该 JPA 层包含 JPA 实体和提供持久化实体所需的基本 API 的服务。单元 tets 直接使用 javax.persistence 类来处理 PersistenceManager。然后它测试持久化 API,我可以在日志中看到用于创建表和序列等的 SQL 语句。

persistence.xml 文件的相关部分如下所示:

  <persistence-unit name="..." transaction-type="RESOURCE_LOCAL">
  <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
  ...
  <properties>
    <property name="javax.persistence.jdbc.url" value="jdbc:h2:mem:test"/>
    <property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/>
    <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
    <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
    <property name="hibernate.format_sql" value="false"/>
    <property name="hibernate.show_sql" value="true"/>
  </properties>
</persistence-unit>
...

我已经下载了 Windows 安装程序 H2 1.4.200,并将其安装在 Windows 10 上。现在我想使用 H2 控制台连接到数据库并检查由 Hibernate 自动创建的表、序列等.

所以,转到http://localhost:8082 我得到以下信息:

但是当我尝试使用定义的 JDBC 连接字符串连接到我的数据库时,我得到以下信息:

我在这里做错了什么?

非常感谢。

尼古拉斯

【问题讨论】:

  • 您必须在应用程序中运行 H2 控制台。您现在正在做的是单独运行 H2;该单独的 H2 服务器无法查看应用程序内部的嵌入式 H2 数据库。
  • this。对于您的设置,hibernate.hbm2ddl.auto=create-drop 数据库将在断开连接后被删除。
  • @Jesper:“从应用程序中运行 H2 控制台”是什么意思? H2 控制台是一个 webapp,而我的用例需要检查 Hibernate 在单元测试中自动创建的 SQL 对象。
  • @SternK:我知道,这是故意的。尝试连接到数据库时,会话处于活动状态。无论如何,用 create 替换 create-drop 不会改变任何事情。
  • 是的,您需要在您的应用程序中运行一个 Web 服务器,该服务器将为 H2 控制台提供服务。你如何做到这一点取决于你的应用程序;如果它是 Spring Boot 应用程序,那么就像在 application.properties 中设置 spring.h2.console.enabled=true 一样简单。

标签: java hibernate jpa h2


【解决方案1】:

最后,我用 Oracle 替换了 H2。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-05
    • 2014-01-13
    • 2011-10-21
    • 2022-01-20
    • 2020-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多