2009-05-07 14 views
5

Hibernate: hbm2ddl.auto=update in production?を読んだ後、いくつかの質問が発生しました。 まず、私がHibernateを使用している理由は、データベースベンダーに依存しない(「同じ」SQLクエリの10バージョンを書く必要はありません。例えば、tsqlとsql)。Hibernateを使用してデータベーススキーマを作成する方法

私の問題は、データベーススキーマ(運用環境)を作成するときに表示されます。私が見る限り、2つの選択肢があります。

  1. hbm2dll =
  2. 純粋なSQL(DDL)スクリプトを更新します。

最初の選択肢は、上のスレッドで広く議論されています。 2番目の選択肢は悪いです。つまり、データベースベンダーに依存するSQL文を作成したくないという最初の問題に戻ります。 (このステートメントは、データベースがHibernateをサポートしている最中に "すべて"がDDL(データベースの構造を定義し検査するために使用されるSQLのサブセット)を実装している場合は、偽である可能性があります。

答えて

5

開発/ステージングモード、転送中のすべての変更を行うと、手動での生産でスクリプトを実行する(または自動的に、しかし、休止状態にそれらを実行することはできません)。 hbm2ddlのアップデートはすべてのケースを網羅していないので、スクリプトにはチューニングが必要な場合があります。

実際、私は決して休止状態でデータベースに対してddlを実行させません。私は、テキストを生成するためにhbm2ddlを使用します。

org.hibernate.tool.hbm2ddl.SchemaExport --config=hibernate.cfg.xml --text --format --delimiter=; 

org.hibernate.tool.hbm2ddl.SchemaUpdate --config=hibernate.cfg.xml --text --format --delimiter=; 
+0

私をパンチに殴ります。完全に合意した。 –

1

私は休止状態(LOT)を好きない、と私はそれはいくつかの非常に良い品質のコードを作ると思うが、私はすぐに私が聞かせたいよりも、本番データベース上の緩いそれを回すだろう非常によく気遣っているグリズリークマのベビーシット。すべてがしばらく偉大になる可能性がありますが、悪い一事件は本当にが悪いです。

私の提案は、テスト環境で、hibernateでデータベーススキーマを生成することです。テスト環境でテストします。次に、これらのスクリプトを本番環境に持ち込んで実行します。その特異性に注意してください。テストが幻想的に成功したとしても、私はまだ、Hibernateをプロダクションサーバ上でワイルドにすることはできません。 Hibernate schemagenの出力を受け取り、それをテストし、検証が済んだら、それを実動サーバーにデプロイします。

+1

ここに敵対しようとはしませんが、私の質問を読んだのですか? – Schildmeijer

+0

私はしました。私の答えがあなたの質問の誤解を示す具体的な方法はありますか? –

+0

あなたの答えの最初の文。 – Schildmeijer

3

通常、JPAスキーマをダンプするツールは、SchemaExportツールに基づいています。このツールは、静的メタデータのみを読み取ります。

JPAスキーマを生成するMaven/Gradleプラグインhttps://github.com/Devskiller/jpa2ddlがあります。すべてのプロパティ、命名方法、ユーザータイプなどが含まれます

Flywayの自動スキーマ移行を生成するためにも使用できます。

関連する問題