テーブルを作成するには、いくつかの方法があります。本番用の最も一般的な使用法は、DBA(またはその役割の開発者)がアプリケーションとは独立してデータベース・スキーマ(表など)を作成することです。
これは典型的なことです。アプリケーションはデータベース内のデータをモデル化するため、データベースは通常、アプリケーションよりも寿命が長いという一般的な知恵があります。
JPAプロバイダに自動的にスキーマを作成させることは可能です。特に、この目的のためにJPAアノテーションにいくつかの属性があります(例えばnullable
属性JoinColumn
)。
これを有効にするには、persistence.xmlのプロバイダ固有のプロパティを使用します。例えば。 (JBoss ASで使用される)Hibernateの場合はhibernate.hbm2ddl.auto
、GlassFishの場合はEclipseLinkの場合はeclipselink.ddl-generation
です。
いくつかの例ではhttp://wiki.eclipse.org/EclipseLink/Examples/JPA/Migration/JBossを参照してください。
テーブルにエンティティを挿入することはまったく異なることです。あなたの質問から、どういうわけか、それらの2つの違いを完全に理解していないかもしれないという気持ちが出ます。例えば、 EntityManager#persist
ですが、私が100%確信しているわけではありません。
テーブルを頻繁に作成する必要があることはわかりません。スキーマを正しく作成すると、新しいテーブルを作成する必要があります。しかし、私たちがやったのであれば、サーバープロジェクトを再構築し、新しいマッピングで展開することができます。私はそれが可能かどうかを知りたがっていました。 – Randnum
新しいマッピングを追加するには、実際には新しいバージョンのアプリケーションを再デプロイする必要があります。この新しいテーブルが既存のテーブル(新しい外部キー、設計変更など)に影響する可能性が高いため、スキーマ移行スクリプトを実行する必要があります。プロダクションサーバーで実行する前に、手順全体をテストして、停止時間をできるだけ短くするようにしてください。 –
良い点。少なくとも、私にもたらされた質問については、これらのテーブルは、関係やキーがない他のテーブルとは独立していると思います。しかし、エンティティを生成するためには再配置する必要があります。それでもやはり悪い考えです。 – Randnum