Ist HBM2DDL.Auto = aktualisiert, vielleicht nicht verschiedene DB -Benutzer?
-
24-10-2019 - |
Frage
Wir stoßen mit einem seltsamen Hibernate -Verhalten mit hbm2ddl.auto
einstellen update
.
In unserem Test -Setup haben wir zwei Datenbankbenutzer, die die Tabellen für unsere Beta -Anwendung enthalten, die andere wird hauptsächlich für die Entwicklung verwendet. Dh die gleichen Tabellennamen mit verschiedenen Benutzern. Wenn neue Tabellen erstellt werden sollen, tun wir dies mit der Verwendung hbm2ddl.auto=update
.
Jetzt ist plötzlich das seltsame Verhalten: Der Update -Prozess sucht nach vorhandenen Tabellen mit dem falschen Benutzer und erstellt diejenigen, die nicht mit dem richtigen Benutzer gefunden wurden.
ZB, wenn die folgenden Tabellen vorhanden sind
USER_A.TABLE_1
USER_B.TABLE_2
und wir aktualisieren mit drei konfigurierten Tabellen: TABLE_1, TABLE_2, TABLE_3
Mit user_b haben wir am Ende mit
USER_A.TABLE_1
USER_B.TABLE_2
USER_B.TABLE_3
TABLE_1
ist nicht erstellt für USER_B
. Nach dem Umbenennen USER_A.TABLE_1
zu USER_A.TABLE_0
und erneut aktualisieren wir am Ende des erwarteten Ergebniss:
USER_A.TABLE_0
USER_B.TABLE_1
USER_B.TABLE_2
USER_B.TABLE_3
Macht das für irgendjemanden Sinn? Gibt es so etwas wie einen internen Hibernate -Cache, der sich wie "Hey, ich habe diese Tabelle bereits auf diesem Server erstellt (und ich kümmere mich nicht um den Benutzer).
Wir haben einige Tests aufgewendet, um zu versichern, dass dies kein Konfigurationsproblem ist, dies auf verschiedenen Maschinen, unterschiedlichen Konfigurationen, von ANT oder der Verwendung der IDE, reproduziert und sicherzustellen Sicher, das Verhalten ist wie beschrieben - aber wir haben völlig aus den Ideen heraus, was passiert.
Ich würde mich sehr freuen, Ihre Ideen dazu zu hören, da dieses Problem seit einiger Zeit nervt.
Vielen Dank, Peter
Lösung
Gibt es so etwas wie einen internen Hibernate -Cache, der sich wie "Hey, ich habe diese Tabelle bereits auf diesem Server erstellt (und ich kümmere mich nicht um den Benutzer).
Nein. Was wahrscheinlich passiert, ist, dass User_a die Tabellen sehen kann, die unter user_b-Konto erstellt wurden, und umgekehrt. Es ist nicht klar, welche Datenbank Sie verwenden, aber ich würde versuchen, Hibernate so zu konfigurieren, dass sie zwei verschiedene Schemas verwenden, zusätzlich nur verschiedene Benutzer. Möglicherweise möchten Sie auch versuchen, die Eigenschaft "hibernate.default_schema" festzulegen, aber ich bin mir nicht sicher, ob dies nur Ihr Problem lösen wird.