JPAとLiquibaseの両方を持っている:それらの設定ファイルをどうするか?
私のプロジェクトはJPAのみで開始され、Springはありません。後で、Liquibaseを追加しましたが、使用できるようにするには永続性ユニット名が必要なため、永続性ユニット名に問題がありましたEntityManager
。
entityManagerFactory = Persistence.createEntityManagerFactory("MyPU");
そのため、Liquibaseを使用してテーブルの作成を続行し、JPAを使用してデータベースに永続化できるように、同じデータベース構成を維持しているにもかかわらずpersistence.xml
、liquibase.properties
ファイルとファイルの両方を保持しました。
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd"
version="2.2">
<persistence-unit name="MyPU">
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/jpa_specialist?createDatabaseIfNotExist=true&useTimezone=true&serverTimezone=UTC"/>
<property name="javax.persistence.jdbc.user" value="root"/>
<property name="javax.persistence.jdbc.password" value="root"/>
<property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL8Dialect"/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
</properties>
</persistence-unit>
</persistence>
changeLogFile=src/main/resources/META-INF/database/dbchangelog.xml
url=jdbc:mysql://localhost/jpa_specialist?createDatabaseIfNotExist=true&useTimezone=true&serverTimezone=UTC
username=root
password=root
調べてみましたが、よくliquibase-hibernate
わかりませんでしたが、diffファイルの生成に使われているようで、今のところ必要ありません。
両方のファイルが必要ですか?そのうちの1つだけにするために私にできることはありますか?
回答
Liquibaseには、presistence.xmlファイルからurl / username / password情報を直接読み取る方法がありません。liquibase-hibernate拡張機能は、データベースをJavaファイルマッピングファイルと比較するためのサポートを追加しますが、LiquibaseがURL /ユーザー名/パスワードを取得する方法は変更しません。
Springを使用していないとのことですが、まだWebアプリケーションを使用している場合は、Liquibaseサーブレットリスナーを使用して、事前構成されたデータソースから接続をプルするLiquibaseを実行できます。JPAは、構成を再定義する代わりに、同じ事前構成されたデータソースからプルすることができます。
それ以外の場合は、persistence.xmlファイルを解析してLiquibaseに渡すために少しカスタムJavaコーディングを行う必要がない限り、両方のファイルが必要です。
繰り返しを避けるために、maven / gradle / whateverセットアップでビルドプロパティを定義<property name="javax.persistence.jdbc.url" value="${database.url}"/>
し、persistence.xmlソースファイルとurl: ${database.url}
liquibase.propertiesファイルに含めるようなことを行うことができます。