2012-04-28 7 views
1

これは実際問題ではありませんが、開発中に時には迷惑なことです。私はいくつかのエンティティを持っているとしましょう(dbはそれらのエンティティに基づいて作成されていますが、それ以外のものは作成されていません)、カラムを追加したり、カラムなどを削除したりしました。JPAによるデータベース設計の変更

これを行うにはどうすればよいですか?私は時々Glassfishを再起動する必要があります。時にはそれを配備するだけで十分です。再起動しても手動でテーブルを消去する必要がある場合があります。 persistence.xmlの私の戦略はCreateに設定されていますが、他のオプションは本当に私を助けませんでした。

エンティティからデータベースへの変更をコミットするための標準的なアプローチはありますか?

答えて

1

JPAには、開発中にテーブルを自動的に変更し、データをテーブルに保存する標準的な方法はありません。場合によっては、CREATE-DROPに切り替えるとそのトリックが実行されますが、テーブル内のデータが失われ、前述のテーブルを作成するスクリプトを作成する必要があります。あなたが言ったように、それは大きな問題ではなく、CREATE-DROPから複数の人のプロジェクトで動作するメソッドに移行するのがよい方法かもしれません。私/私たちのやり方は、レポにSQLスクリプトファイルを置くことです。自分のエンティティを変更すると(手動で)そのスクリプトを変更するか、新しいスクリプトを追加します(テーブルが既に稼働しているか、テーブルのデータが挿入物の数行以上または使用によって作成され、容易に再現できない)。このようにして、常にマージされ実行可能なコードで作業します。他のプロジェクトメンバーは、現在の開発ブランチを(ローカルの)データベースに対して実行したいのですが、テーブルが古くなっているのはSQLスクリプトを実行するだけです。

+0

はい、これも私がやっていることですが、データを失うことはありません(それぞれ気にしますが、私はそれを避けることはできません)。しかし、私の質問のポイントは、時にはデータベースに変更を加えるのに多くの時間がかかり、プロセスをスピードアップするために何をすべきかわからないということでした(サーバーやデプロイメントを再起動する必要がある場合など) –

+0

サウンドIDEやビルド+特定の状況を展開するようなものです。 asadminを使用してアプリケーション(ear-file)を再デプロイする場合、CREATE-DROPは正しく実行され、glassfishの再起動は必要ありません。 maven-scriptやnetbeans/eclipse /などを介してデプロイする場合は、何らかの設定上の問題や、一般的なキャッシュ/ tmp-dirの問題があるかもしれません。 – esej