我们遇到奇怪的休眠行为,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%肯定,行为如上所述 - 但我们完全没有想法会发生什么。
我很高兴听到你的想法,因为这个问题现在已经唠叨了一段时间。
非常感谢, 彼得
答案 0 :(得分:0)
是否有类似于内部hibernate缓存的记忆,例如“嘿,我已经在此服务器上创建了这个表(我不关心用户)”。
没有。可能发生的事情是USER_A可以看到在USER_B帐户下创建的表,反之亦然。目前尚不清楚您使用的是哪个数据库,但我会尝试将Hibernate配置为使用两种不同的模式,此外还使用不同的用户。您可能还想尝试设置属性“hibernate.default_schema”,但我不确定这只会解决您的问题。