私はいくつかのJPAのものをいじっており、マッピングを変更して、それらがどのようにあるべきかを確認しています。これは基本的な実験です。ただし、エンティティを単純に読み取り、テーブル スキーマを生成するツールが見つかりません。JBossツールでこのようなものを見つけようとしましたが、nada. Eclipse との統合は大きな利点ですが、コマンド ライン ツールまたは Ant タスクを使用します。
何か案は?
JPAでこれを行う普遍的な方法はないと思います。これを実現するには、基礎となるJPA実装を直接使用する必要があります。
Hibernateの場合、いくつかの可能性があります。
hbm2ddl
EclipseLink (以前の Oracle TopLink、JPA 2.0 RI) については、Using EclipseLink JPA Extensions for Schema Generation を参照してください。原理的には Hibernate に非常に似ていますが、一見したところ、DB スクリプトを作成するためのスタンドアロン ユーティリティとして使用できるものは何もありません。
他の JPA 実装 (BEA/Oracle Kodo、Apache OpenJPA) には、おそらくこれを実現するための固有の方法があります。
Hibernate を使用するときは、これを構成ファイルに追加するだけです。
<property name="hbm2ddl.auto">update</property>
すべてを処理します。JPA に相当するものが何であるかはわかりませんが、Hibernate の影響を大きく受けているため、同様のものが見つからない場合は驚くでしょう。
ツールは必要ありません。通常、単純な JUnit テストを実行するだけで、データベースが作成されます。
Mavenプラグインによる:
<plugin>
<!-- run "mvn hibernate3:hbm2ddl" to generate a schema -->
<groupId>org.codehaus.mojo</groupId>
<artifactId>hibernate3-maven-plugin</artifactId>
<version>3.0</version>
<configuration>
<hibernatetool>
<classpath>
<path location="${project.build.directory}/classes" />
<path location="${project.basedir}/src/main/resources/META-INF/" />
</classpath>
<jpaconfiguration persistenceunit="galleryPersistenceUnit" />
<hbm2ddl create="true" export="false" destdir="${project.basedir}/target" drop="true" outputfilename="mysql.sql" format="true" console="true"/>
</hibernatetool>
</configuration>
</plugin>
Hibernate のorg.hibernate.tool.hbm2ddl.SchemaExport
クラスとこの小さなメソッドを使用して
データベースにスキーマを生成します。
public static void rebuildSchema()
{
configuration = new Configuration();
configuration.configure();
new SchemaExport(configuration)
.setHaltOnError(true)
.execute(false, true, false, false);
}
外部ファイルに DDL を作成するには、この呼び出しをexecute
.
new SchemaExport(configuration)
.setHaltOnError(true)
.setOutputFile(outputFile)
.setImportFile("")
.setDelimiter(";")
.setFormat(true)
.execute(false, false, false, true);
"hibernate.hbm2ddl.auto" を "update" に設定するのは悪い形式と考えられています。これは、本番データベースを自動的に変更すると壊れる可能性があるためです。説明については、Hibernate hbm2ddl.auto の可能な値とその機能を参照してください。.
James McMahonのリストに追加:
OpenJPAの場合:
<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>
DataNucleusには独自の SchemaTool があり、スキーマを生成したり、必要な DDL ステートメントを生成して自分で適応および適用したりできます。
-- アンディ ( DataNucleus )
Antonio Goncalves は、彼のブログでスキーマを生成するための API について述べています。
JPA 2.1では、この目的のためにgenerateSchemaメソッドが導入されました。
ブログの例:
public class Main {
public static void main(String[] args) {
Persistence.generateSchema("samplePU", null);
}
}