0

私は1つのJavaプロジェクトを持っています。その中で私は @Entity を使用します。私のプロジェクトにはいくつかの制約があります。テーブルは自動的に作成されます。したがって、JPa @Entity を使用します。問題は、プログラムが再起動するたびに、エンティティによって新しいテーブルが作成されることです。だから私の古いデータは失われました。そのようなデータが必要です。トラップ エンティティはデータベースのコンテンツを上書きすべきではありませんか? それを解決する方法は?

4

2 に答える 2

0

<property name="hibernate.hbm2ddl.auto" value="update"/>persistence.xml で使用します。スキーマを生成していない場合は、最初に使用する<property name="hibernate.hbm2ddl.auto" value="create"/>とスキーマが生成されます。次に<property name="hibernate.hbm2ddl.auto" value="update"/>、スキーマがあるので使用します。

于 2013-08-01T09:39:51.963 に答える
0

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"/>
于 2013-08-01T09:36:55.053 に答える