0

hbm2ddl.autoに設定すると、奇妙な休止状態の動作が発生しupdateます。

テストセットアップでは、2人のデータベースユーザーがいます。1人はベータアプリケーションのテーブルを含み、もう1人は主に開発に使用されます。つまり、異なるユーザーの同じテーブル名。新しいテーブルを作成する場合は、を使用して作成し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_1USER_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 アカウントで作成されたテーブルを参照でき、その逆も同様です。どのデータベースを使用しているかは明確ではありませんが、異なるユーザーを使用するだけでなく、2 つの異なるスキーマを使用するように Hibernate を構成しようと思います。プロパティ「hibernate.default_schema」を設定することもできますが、これだけで問題が解決するかどうかはわかりません。

于 2011-01-26T19:20:43.167 に答える