0

我们在hbm2ddl.auto设置为时遇到了奇怪的休眠行为update

在我们的测试设置中,我们有两个数据库用户,一个包含我们的 beta 应用程序的表,另一个主要用于开发。即具有不同用户的相同表名。当要创建新表时,我们使用hbm2ddl.auto=update.

现在突然奇怪的行为是:更新过程用错误的用户查找现有的表,并用正确的用户创建那些没有找到的表。

例如,如果存在以下表格

USER_A.TABLE_1
USER_B.TABLE_2

我们更新配置了三个表:TABLE_1, TABLE_2, TABLE_3使用 USER_B,我们最终得到

USER_A.TABLE_1
USER_B.TABLE_2
USER_B.TABLE_3

TABLE_1不是为USER_B. USER_A.TABLE_1重命名USER_A.TABLE_0并再次更新后,我们最终得到了预期的结果:

USER_A.TABLE_0
USER_B.TABLE_1
USER_B.TABLE_2
USER_B.TABLE_3

这对任何人都有意义吗?是否有类似内部休眠缓存的内容,例如“嘿,我已经在此服务器上创建了此表(并且我不关心用户)”。

我们进行了相当多的测试以确保这不是配置问题,在不同的机器上、不同的配置、从 ant 或使用 IDE 重现此问题,确保在构建目录的任何地方都找不到 USER_A 的密码等。所以我们是 100%当然,行为如所描述 - 但我们完全不知道会发生什么。

我很高兴听到您对此的想法,因为这个问题已经困扰了一段时间。

非常感谢,彼得

4

1 回答 1

0

是否有类似内部休眠缓存的内容,例如“嘿,我已经在此服务器上创建了此表(并且我不关心用户)”。

不。可能发生的情况是 USER_A 可以看到在 USER_B 帐户下创建的表,反之亦然。目前尚不清楚您使用的是哪个数据库,但我会尝试将 Hibernate 配置为使用两种不同的模式,除了只使用不同的用户。您可能还想尝试设置属性“hibernate.default_schema”,但我不确定这是否能解决您的问题。

于 2011-01-26T19:20:43.167 回答