我将我的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。
答案 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.
在这里查看示例: