2011-10-29 6 views
1

私はJPA(eclipselink)開発で私の最初のステップを踏んでいます。エンティティにもたらされた変更をデータベースに再反映せずに反映するのに役立つ良い方法があれば、全体のデータベースを作成します。私の場合は jpa eclipselinkフィールドタイプを変更する

私は、30個の以上のエンティティを持っているこれらのいくつかは、「正しく」に定義されており、すでにデータベースにデータ行を保持しているが、私はいくつかを定義しながら、私はミスを犯したことを考え出しました他のエンティティはlong型ではなくプライマリ型のint型を使用していますが、最悪の場合、これらのエンティティの一部は他のエンティティによってマッピングされているため、外部キーとして使用されています...データベース全体を再作成せずにこれに対処するための「適切な」方法。データベースを再作成すると、既に塗りつぶされたテーブルの行を再塗りつぶし、多くの時間を腰掛けるようになります。

おかげで、事前に
ジョージは

+0

つまり、エンティティの主キーを 'int'から 'long'に変更し、実際のデータベースとの一貫性を維持したいですか? –

答えて

2

int型とlong型は、データベース内の数の列にマップされています。エンティティの型を変更しても何も変わりません。データベース内の列の精度を変更して、数値が長い値を受け入れるのに十分な大きさになるようにする必要がありますが、これを行うにはalter文を使用してSQLで簡単です。

JPAは、データベースにアクセスするための単なる方法です。データベースは、JPAエンジンによって作成されることは想定されていません。あなたはそれをするかもしれませんが、あなたはそれを強いられません。 SQLを使用してデータベースで必要な処理を行い、Javaコードで必要な処理を実行できます。アプリケーションを実行しているときにそれらが両方ともマップされていれば、動作します。

+0

データベースをsqlで変更したのは私の最初の反省でしたが、データベースはエンティティに基づいて自動的に作成されるため、自動的に変更することも可能かもしれません。私はそれをsqlを使用すると思います。ヘルプのおかげで –

+1

"データベースはJPAエンジンによって作成されていないはずです。" - はい、それを言う理由はありません。 –

+1

@Andrei:エンタープライズレベルのJPAプロジェクトに参加したことがありますか? DBAにデータベースを作成するためにJPAを使用しなければならないと言ったことはありますか?あなたのデータベースとそれに含まれるデータのギガバイトを削除し、デザインに何か変更があるたびにそれを再作成しますか? –

0

あなたがこのようでEclipseLinkを設定することで、あなたはモジュールintheやった変更を反映するために自動的にあなたの現在のスキーマを更新することができます。

<property name="eclipselink.ddl-generation" value="create-tables" /> 

をお使いのモデルに大幅な変更の場合は、それがスキーマに適切な更新を保証するものではありません、小さいものの場合はうまくいくはずです。

+0

これは、私がテーブルを作成したことです。再使用すると、テーブルがすでに存在していることを伝えることはありません。何か新しいエンティティを作成しない限りです。 "drop-and-create-tables"を使用しても問題は解決しません。すべてを再作成し、挿入したすべてのデータを削除するからです... –