JPAを使用してMySQLテーブルに新しい列を追加したいと思います。どうすれば達成できますか?JPAを介してMySQLに新しい列を追加
テーブルを更新することはできますが、JPAを使用してクエリに使用できるようにエンティティを更新するにはどうすればいいですか?または他の解決策がありますか?
JPAを使用してMySQLテーブルに新しい列を追加したいと思います。どうすれば達成できますか?JPAを介してMySQLに新しい列を追加
テーブルを更新することはできますが、JPAを使用してクエリに使用できるようにエンティティを更新するにはどうすればいいですか?または他の解決策がありますか?
JPAは「オンザフライ」スキーマの更新を提供しません(エンティティクラスの動的更新ではありません)。
プロバイダによっては、エンティティクラスを再読み込みできるときに、EMFが作成されたとき(たとえば、DataNucleus JPAなど)に列を追加できるようになります。それはすべてあります。それ以外の場合は、アプリケーションを再設計してください
ええと...それを得ました、おそらく再建築家は唯一の方法です。ありがとうございました。 – helloworld1234
ほとんどのプロパティはpersistence.xml
です。 1つの標準的な方法はjavax.persistence.schema-generation.scripts.create-script-source
を使用することです。ウェブアプリケーションを起動するたびに実行される場合と実行されない場合があります。起動時に例外が発生する可能性があります。
Hibernateでは、hibernate.hbm2ddl.auto
〜update
を使用してエンティティに応じてテーブルを更新することができます。 EclipseLinkので
eclipselink.ddl-generation
プロパティがあります。 create-or-extend-tables
の設定が適切であるようです。
http://www.eclipse.org/eclipselink/documentation/2.4/jpa/extensions/p_ddl_generation.htm
しかし、一般的に、あなたのスキーマを手動で運用サーバーのWebアプリケーションの更新時にあらかじめ書かれたスクリプトでそれを更新するよりも信頼性の低いです維持するためにJPAを使用して、話します。
私は最も簡単な解決策は、ユーザーがデータベーススキーマを変更する必要性を回避する方法を見つけることだと思います。ビジネスロジックについて私たちを手がかりにすることはできますか? –
ユーザー(クライアント)がデータベーススキーマと直接通信できないので、クライアント側でデータベースを更新できるようにそのような方法を実装したいのですが... – helloworld1234
これは本当に私の質問には答えません。 _Why_クライアントがデータベーススキーマを変更できるようにする必要がありますか?たとえば、新しい列を追加することが許可されている場合、悪意のある攻撃からどのように保護するのですか?数千の列を作成することで、不正なユーザーが入ったり、テーブルを爆発させたりすることを心配する必要があります。 –