私は1つのJavaプロジェクトを持っています。その中で私は @Entity を使用します。私のプロジェクトにはいくつかの制約があります。テーブルは自動的に作成されます。したがって、JPa @Entity を使用します。問題は、プログラムが再起動するたびに、エンティティによって新しいテーブルが作成されることです。だから私の古いデータは失われました。そのようなデータが必要です。トラップ エンティティはデータベースのコンテンツを上書きすべきではありませんか? それを解決する方法は?
2 に答える
<property name="hibernate.hbm2ddl.auto" value="update"/>
persistence.xml で使用します。スキーマを生成していない場合は、最初に使用する<property name="hibernate.hbm2ddl.auto" value="create"/>
とスキーマが生成されます。次に<property name="hibernate.hbm2ddl.auto" value="update"/>
、スキーマがあるので使用します。
persistence.xml ファイルには、DLL の自動生成をオフにする設定が必要です。以下は、hibernate を使用した persistence.xml ファイルの例です。hibernate.hbm2ddl.auto
プロパティは検証に設定されており、テーブルが上書きされません。Hibernate に依存して DDL を作成する場合、アプリケーションを初めて実行するときにこの設定をしたくない場合は、一度実行して DDL (テーブル) を正常に作成した後に設定されます。
この設定がcreate-drop
スキーマに設定されている場合、永続コンテキストが作成されるたびにテーブルが再作成され、すべてのデータが失われます。このプロパティは、ORM ベンダーの実装に固有のものになります。
最良のアドバイスは、ベンダー固有の設定に関するドキュメントを見つけて、ニーズに最適なオプションを選択することです。この投稿では、Hibernate で設定できる値について説明しています。
<persistence-unit name="toThought" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
<property name="hibernate.hbm2ddl.auto" value="validate"/>
</properties>
</persistence-unit>
EclipseLink では、このプロパティは次のとおりです。
<property name="eclipselink.ddl-generation" value="create-tables"/>