多个JPA持久化单元指向同一个数据库?

5
我们能否在不同的Java项目中,使用多个JPA持久化单元指向同一个数据库,并同时部署在服务器上?这里的“同时”指的是它们一起部署,而不是在同一秒内部署。我正在使用hsqldb数据库。
我的项目采用客户端-服务器模型。我有一个统一的数据库表格,服务器填充数据,然后客户端在另一个项目中访问该数据。我可以通过服务器成功地填充数据库。但是当我部署客户端项目时,所有来自数据库的数据都被擦除了。
我对两个持久化单元都使用了<property name="hibernate.hbm2ddl.auto" value="update" />
1个回答

3

我们可以在不同的Java项目中有多个指向同一数据库的JPA持久化单元,并在服务器上同时部署吗?

只要两个项目中没有不兼容的映射,这应该是可行的。但是您将无法使用第二级缓存。

但是当我部署客户端项目时,所有来自数据库的数据都被删除了。(...)

如果将 hbm2ddl.auto 设置为 update,我并不希望出现这种行为,但我不知道在“集群式”环境中(多个JVM同时执行更新)使用时行为是否定义良好。

当服务器部分完成初始化后,您部署客户端时会发生什么?

我的建议:

  • 设置日志以查看发生了什么确切的
  • 如果您正在共享相同的实体,可能不要在客户端和服务器上进行update(尽管如果一个接一个地完成,这不应该是问题)。
  • 最终,不要在生产数据库上使用update

你的意思是只部署客户端并卸载服务器? - Vashishtha Jogi
@Vashishtha 不,我的意思是在模式更新完成后才部署客户端和服务器。 - Pascal Thivent
@Pascal 我正在做完全相同的事情。但是它不起作用 :( - Vashishtha Jogi
@Vashishtha对不起,但“它不起作用”并没有说明任何问题。按建议激活日志记录,解释您所做的更改或更改,当前结果是什么。 - Pascal Thivent
@Pascal 很抱歉表述不够清晰。我做了以下几件事情:1)启用了日志记录;2)部署了服务器和客户端。在日志中,当启动服务器时,我看到插入语句。但是当我启动客户端时,服务器的持久化单元被卸载,然后客户端的持久化单元被部署,清除了数据库中的所有数据。 - Vashishtha Jogi
@Vashishtha 嗯,我不知道为什么服务器会被撤销部署。实际上,我不确定是否完全理解架构,涉及哪些组件等等。在我看来,您应该澄清您的问题,添加您在评论中提到的细节。然后也许有人能够提供解释。 - Pascal Thivent

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接