我在H2的桌子在哪里?

时间:2015-04-22 17:25:58

标签: java jpa-2.0 h2 wildfly-8

我将我的Web应用程序部署到WildFly 8.02 Final服务器。我使用带有jndi名称空间的服务器附带的默认开箱即用数据源:

java:jboss/datasources/ExampleDS

我使用默认网址:

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尝试创建已存在的表,但同时客户端工具仍未显示任何用户创建的表。

THX。

1 个答案:

答案 0 :(得分:2)

看看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