我在 H2 中的表在哪里?

Where are my tables in H2?

我将我的 Web 应用程序部署到 WildFly 8.02 Final 服务器。我使用带有 jndi 名称 space:

的服务器附带的默认开箱即用数据源
java:jboss/datasources/ExampleDS

我使用默认 url:

jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE

从 IntelliJ IDEA 数据库客户端工具或其他客户端应用程序访问 H2(我使用 url 连接,因为通过默认端口的 tcp 连接不起作用)。

该应用程序基本上是一个空的 WAR,只有实体 bean 和 persistence.xml 文件。我打算纯粹测试根据我的注释在底层数据源中创建哪些表。

事情是这样的:当我在 persistence.xml 中设置时:

<property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>

war 已成功部署,但是当我通过任何客户端工具连接到 H2 数据源时,我只能看到以下之后的预定义表:

SELECT * FROM INFORMATION_SCHEMA.TABLES

我可以通过客户端工具创建表,并且我可以通过之前的 SQL 查询来跟踪它们的存在。所以看起来 JPA 框架还没有创建表。

但是当我将 persistence.xml 更改为不同的架构创建模式时:

<property name="javax.persistence.schema-generation.database.action" value="create"/>

部署将失败并出现 jdbc 异常,表明 JPA 试图创建已经存在的表,但同时客户端工具仍然不显示任何用户创建的表。

谢谢。

看看http://www.h2database.com/html/features.html#in_memory_databases :

To access an in-memory database from another process or from another computer, 
you need to start a TCP server in the same process as the in-memory database 
was created. The other processes then need to access the database over TCP/IP 
or TLS, using a database URL such as: jdbc:h2:tcp://localhost/mem:db1.

看这里的例子:

H2 database in memory mode cannot be accessed by Console