2016-07-07 13 views
0

EclipseLinkの実行時にデータベースを動的に再作成する方法はありますか?EclipseLinkを使用して実行時にデータベースを再作成

今、私はそれを持っているデータベースが存在しない場合、それはコンパイル時にデータベースを作成すること:

<?xml version="1.0" encoding="UTF-8" ?> 
<persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" 
    version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"> 
    <persistence-unit name="DefaultUnit" transaction-type="RESOURCE_LOCAL"> 

     <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
     <exclude-unlisted-classes>false</exclude-unlisted-classes> 
     <properties> 
      <property name="eclipselink.ddl-generation.output-mode" 
       value="database" /> 
      <property name="eclipselink.logging.level" value="INFO" /> 
      <property name="eclipselink.logging.level.sql" value="INFO" /> 
      <property name="javax.persistence.schema-generation.database.action" 
       value="create" /> 
     </properties> 

    </persistence-unit> 
</persistence> 

しかし、私はドロップできるようにしたい、そしてアプリケーションがある一方で、データベースを再作成しますランニング。 I.Eユーザが特別なフラグを渡すと、現在のデータベースを削除して再生成するものを呼びたいと思う。

私はあなたが休止状態であなたはpersistence.xmlのに<property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>を追加することができますSchemaExport class

答えて

0

を使用していることを行うことができますことを見出しました。

すべてのテーブルが削除され、再度作成されます。注意してください。以前のデータはすべて失われます。

+0

私はそれをしたくないのです。私はテーブルを削除し、いくつかのフラグに基づいて再作成したいだけです(これは設定の設定として渡すことができます) – user171943

0

プロパティは実行時に動的に追加できるので、EntityManagerFactoryを初めて作成してデータベースを削除して作成するときには、「eclipselink.ddl-generation」に値「drop-and-create-tables」を追加できます。もちろん、これはオンザフライで状況を変えたいランニングアプリにとってあまり役に立ちません。

EclipseLInkには、永続ユニットの動的な変更と再ロードを可能にするいくつかの秘訣があります。

Map properties = new HashMap(); 
properties.put("eclipselink.ddl-generation", "drop-and-create-tables"); 
properties.put("eclipselink.ddl-generation.output-mode", "database"); 
//this causes DDL generation to occur on refreshMetadata rather than wait until an em is obtained 
properties.put("eclipselink.deploy-on-startup", "true"); 
JpaHelper.getEntityManagerFactory(em).refreshMetadata(properties); 

を試してみてくださいorg.eclipse.persistence.jpa.JPAHelperクラスは、単に非JPA refreshMetadata呼び出しを行うためにJpaEntityManagerFactoryインスタンスを取得するために工場をアンラップするために使用されます。任意の数のプロパティまたは設定を変更することができ、リフレッシュコール後に取得された新しいEntityManagerには、これらの変更が反映されます。

関連する問題