2016-10-04 21 views
0

JPAを使用してMySQLテーブルに新しい列を追加したいと思います。どうすれば達成できますか?JPAを介してMySQLに新しい列を追加

テーブルを更新することはできますが、JPAを使用してクエリに使用できるようにエンティティを更新するにはどうすればいいですか?または他の解決策がありますか?

+0

私は最も簡単な解決策は、ユーザーがデータベーススキーマを変更する必要性を回避する方法を見つけることだと思います。ビジネスロジックについて私たちを手がかりにすることはできますか? –

+0

ユーザー(クライアント)がデータベーススキーマと直接通信できないので、クライアント側でデータベースを更新できるようにそのような方法を実装したいのですが... – helloworld1234

+0

これは本当に私の質問には答えません。 _Why_クライアントがデータベーススキーマを変更できるようにする必要がありますか?たとえば、新しい列を追加することが許可されている場合、悪意のある攻撃からどのように保護するのですか?数千の列を作成することで、不正なユーザーが入ったり、テーブルを爆発させたりすることを心配する必要があります。 –

答えて

0

JPAは「オンザフライ」スキーマの更新を提供しません(エンティティクラスの動的更新ではありません)。

プロバイダによっては、エンティティクラスを再読み込みできるときに、EMFが作成されたとき(たとえば、DataNucleus JPAなど)に列を追加できるようになります。それはすべてあります。それ以外の場合は、アプリケーションを再設計してください

+0

ええと...それを得ました、おそらく再建築家は唯一の方法です。ありがとうございました。 – helloworld1234

1

ほとんどのプロパティはpersistence.xmlです。 1つの標準的な方法はjavax.persistence.schema-generation.scripts.create-script-sourceを使用することです。ウェブアプリケーションを起動するたびに実行される場合と実行されない場合があります。起動時に例外が発生する可能性があります。

Hibernateでは、hibernate.hbm2ddl.autoupdateを使用してエンティティに応じてテーブルを更新することができます。 EclipseLinkので

http://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/Hibernate_User_Guide.html#configurations-hbmddl

eclipselink.ddl-generationプロパティがあります。 create-or-extend-tablesの設定が適切であるようです。

http://www.eclipse.org/eclipselink/documentation/2.4/jpa/extensions/p_ddl_generation.htm

しかし、一般的に、あなたのスキーマを手動で運用サーバーのWebアプリケーションの更新時にあらかじめ書かれたスクリプトでそれを更新するよりも信頼性の低いです維持するためにJPAを使用して、話します。

関連する問題