当前位置: 首页 > 知识库问答 >
问题:

如何处理Hibernate创建-删除模式与多个应用程序连接到同一个数据库?

巫马修为
2023-03-14

我们设置了开发环境,以便Hibernate每次启动我们的应用程序时都会创建一个新的空数据库:

<property name="hibernate.hbm2ddl.auto" value="create-drop"/>

这适用于部署在服务器上的单个应用程序,但在我们的开发环境中,我们通常部署连接到同一数据库的多个应用程序。它们都使用来自应用程序服务器的相同数据源。

问题在于,当它们在 JBoss AS7 中启动时,它们是并行部署的,因此两个应用程序服务器都尝试同时创建表。我们得到这样的东西(带有匿名的表格和列名):

16:07:25,307 ERROR [org.hibernate.tool.hbm2ddl.SchemaExport] (MSC service thread 1-13) Unsuccessful: create table PUBLIC.SOME_TABLE (SOME_COLUMN varchar(32) not null, SOME_OTHER_COLUMN char not null, primary key (SOME_COLUMN))
16:07:25,346 ERROR [org.hibernate.tool.hbm2ddl.SchemaExport] (MSC service thread 1-13) Table "SOME_TABLE" already exists; SQL statement:
create table PUBLIC.SOME_TABLE (SOME_COLUMN varchar(32) not null, SOME_OTHER_COLUMN char not null, primary key (SOME_COLUMN)) [42101-161]

这些错误被忽略,服务器最终会启动,但我们想知道是否有办法避免这个问题。我们已经讨论过创建一个应用程序,该应用程序部署只是为了执行createdrop并强制其他应用程序等待,但我们不确定将JBoss的部署扫描仪更改为串联而不是并行部署应用程序有多困难。我们也对其他想法持开放态度。

共有1个答案

向泽语
2023-03-14

在开发环境中,每个已部署的应用都应具有自己的数据库架构。这不仅可以解决问题,还可以解决以下问题:

  • 两个开发人员正在执行一些测试,其中一个失败,因为另一个开发人员修改了第一个开发人员使用的数据
  • 一个开发人员正在开发一个需要更改架构的演变,而另一个开发人员则修复了当前架构上的错误

我相信还有很多其他的场景会引发问题。让每个开发人员都有自己的模式,一切都会变得容易得多。

 类似资料:
  • 也就是说,我想创建应用程序,然后让这些应用程序访问一个项目的特定Firebase数据库。 查看Firebase Android文档,我找不到一种方法来使用下面的方法将数据发送到另一个项目中的另一个Firebase数据库,但其中的引用是另一个项目的。

  • 问题内容: 在我的一个项目中,我有一个管理多个客户(或客户,如果您愿意的话)的应用程序。对于他们每个人,我在数据库上都有一个专用的架构。但是,应用程序一次只处理一个客户端,即,用户必须从应用程序中的一个客户端切换到另一个客户端(在运行时,不重新启动应用程序),以便从该新客户端访问数据。 您将如何管理此类项目的连接以及持久层? 我想为此使用hibernate。在处理几个数据库/模式时,我必须特别注意

  • 问题内容: 我是hibernate和尝试事物的新手。似乎所有令人感兴趣的一件事是如何连接到不同的数据库?我在这里有两个问题: 如果在同一个Web应用程序中,我需要连接到MySQL和Oracle,该怎么办? 我正在使用MySQL,并且有两个数据库test1和test2,如何连接和检索数据? 我在博客中读到我们可以创建不同的配置文件并执行此操作。我尝试过,但是没有成功。这是我尝试过的: 其中path是

  • 问题内容: 我试图确定分布式事务中多个数据库连接的行为。 我有一个运行很长时间的过程,它产生了一系列线程,然后每个线程负责管理其DB连接等。所有这些都在事务作用域内运行,并且每个线程都通过一个对象加入到事务中。 当我并行执行此过程时,我遇到了几个问题,即似乎存在某种阻止查询在事务上同时执行的块。 我想知道的是事务协调器如何处理从多个连接到同一数据库的查询,甚至是否建议跨线程传递连接对象? 我读过M

  • 问题内容: 语境 我正在创建一个数据库环境,在该环境中,我想以几种不同的模式拆分数据以用于不同的用户组。但是,由于其中一个数据库包含公共实体,因此应该共享给所有人。 假设数据库: DB1-通用实体; 车轮实体 DB2-组“ A”; 汽车实体 DB3-组“ B”; 摩托车实体 我有三个不同的项目: 项目1: 车轮豆 专案2: 汽车制造商 专案3: 摩托车构造者 问题 我正在尝试从项目/方案(2,“

  • 这是否意味着我的整个应用程序只能连接到单个Kafka集群,或者KafkaStreams的每个实例只能连接到单个集群? 我可以创建多个连接到不同集群的具有不同属性的KafkaStreams实例吗?