私は最近 JPA について簡単に調べていましたが、データベース スキーマの移行と、作成したクラスとの整合性を維持することとは何なのか疑問に思っていました。
このようなものに対する JPA のサポートはありますか? ユーティリティ?ベストプラクティス?
乾杯!
私は最近 JPA について簡単に調べていましたが、データベース スキーマの移行と、作成したクラスとの整合性を維持することとは何なのか疑問に思っていました。
このようなものに対する JPA のサポートはありますか? ユーティリティ?ベストプラクティス?
乾杯!
データベース スキーマを更新するために JPA プロバイダーに依存することはありません。良いアプローチの 1 つについてLiquibaseを確認してください。
短い答えはノーです。
Bean を変更する場合は、既存のスキーマを手動で移行する必要があります。したがって、Rails スタイルのデータベース移行については、他の場所を探す必要があります。
ただし、Java Bean から初期ddlを簡単に生成できます。次の例は、EclipseLink バージョン 2.0 を使用したスキーマの作成を示しています。
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/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">
<persistence-unit name="JPATestPU" transaction-type="RESOURCE_LOCAL">
<provider>
org.eclipse.persistence.jpa.PersistenceProvider
</provider>
<class>org.randompage.MyEntity</class>
<properties>
<property name="javax.persistence.jdbc.user" value="johndoe"/>
<property name="javax.persistence.jdbc.password" value="secret"/>
<property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:h2:~/.h2/testdb;FILE_LOCK=NO"/>
<property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
<property name="eclipselink.logging.level" value="INFO"/>
</properties>
</persistence-unit>
</persistence>
ここで重要な要素は
<property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
これにより、既存のテーブルを削除し、JPA マッピングから新しいものを 1 回生成するように EclipseLink に指示します。この手順はベンダー固有であるため、他の JPA ベンダー (Hibernate、OpenJPA...) については、それぞれのドキュメントを参照する必要があります。
を Hibernateに設定するgenerateDdl
と (それが基になる実装である場合)、現在の方言に従ってデータベース スキーマが生成されます。したがって、方言を変更すると、データベースが自動的に生成されます。
他の JPA プロバイダーは、これに対して異なるプロパティを持っている場合があります。