hbm2ddl.auto = updateは違いはありません。
-
24-10-2019 - |
質問
奇妙な冬眠行動に遭遇しています hbm2ddl.auto
に設定 update
.
テストセットアップには、ベータアプリケーション用のテーブルが含まれている2つのデータベースユーザーがあり、もう1つは主に開発に使用されます。 IE異なるユーザーの同じテーブル名。新しいテーブルを作成する場合、使用することでそうします hbm2ddl.auto=update
.
突然、奇妙な動作は次のとおりです。更新プロセスは、間違ったユーザーを備えた既存のテーブルを探し、適切なユーザーで見つからないユーザーを作成します。
たとえば、次のテーブルが存在する場合
USER_A.TABLE_1
USER_B.TABLE_2
また、構成された3つのテーブルで更新します。 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のパスワードがビルドディレクトリのどこにも見つからないことを確認してください。確かに、行動は説明されているとおりです - しかし、私たちは何が起こるかを完全に考えていません。
この問題はしばらくの間、しつこいので、これについてのあなたのアイデアを聞いてとてもうれしいです。
どうもありがとう、ピーター
解決
「このサーバーでこのテーブルをすでに作成している(そしてユーザーについては気にしない)のようなものを思い出して、内部の冬眠キャッシュのようなものがありますか。
いいえ。おそらく起こっているのは、user_aがuser_bアカウントで作成されたテーブルを見ることができるということです。どのデータベースを使用しているかは明確ではありませんが、異なるユーザーのみを使用することに加えて、2つの異なるスキーマを使用するようにHibernateを構成しようとします。また、プロパティ「hibernate.default_schema」を設定しようとすることもできますが、これが問題を解決するかどうかはわかりません。