hbm2ddl.auto = update是否不尊重不同的数据库用户?

时间:2011-01-26 18:15:29

标签: database hibernate schema persistence hbm2ddl

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

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

现在突然出现了一个奇怪的行为:更新过程会查找具有错误用户的现有表,并创建未找到合适用户的表。

E.g。如果存在以下表格

USER_A.TABLE_1
USER_B.TABLE_2

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

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

这对任何人都有意义吗?有没有类似于内部hibernate缓存的记忆,例如“嘿,我已经在这个服务器上创建了这个表(我不关心用户)”。

我们花了相当多的测试来确保这不是配置问题,在不同的机器上,不同的配置,从ant或使用IDE重现这一点,确保在构建目录等任何地方都找不到USER_A的密码。所以我们100%肯定,行为如上所述 - 但我们完全没有想法会发生什么。

我很高兴听到你的想法,因为这个问题现在已经唠叨了一段时间。

非常感谢, 彼得

1 个答案:

答案 0 :(得分:0)

  

是否有类似于内部hibernate缓存的记忆,例如“嘿,我已经在此服务器上创建了这个表(我不关心用户)”。

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