Как ссылаться на имя единицы персистенции в Liquibase
Я хочу выполнить liquibase:diff
между существующей базой данных и моими сущностями, определенными в аннотациях JPA. На самом деле, вместо использования файла persistence.xml для определения entityManagerFactory, я использую Spring с конфигурацией на основе Java как таковой:
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory()
{
LocalContainerEntityManagerFactoryBean entityManagerFactory = new LocalContainerEntityManagerFactoryBean();
entityManagerFactory.setDataSource(dataSource());
entityManagerFactory.setPersistenceUnitName("my-persistence-unit");
entityManagerFactory.setPackagesToScan("com.mycompany.entities");
entityManagerFactory.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
Properties properties = new Properties();
properties.put("javax.persistence.transactionType", "RESOURCE_LOCAL");
properties.put("hibernate.hbm2ddl.auto", "validate");
properties.put("hibernate.dialect", "org.hibernate.dialect.H2Dialect");
properties.put("hibernate.connection.url", "jdbc:h2:D:/work/06-database/my-database;");
properties.put("hibernate.format_sql", "true");
properties.put("hibernate.connection.username", "sa");
properties.put("hibernate.connection.password", "");
entityManagerFactory.setJpaProperties(properties);
return entityManagerFactory;
}
Объекты определены в com.mycompany.entities
и я хочу сослаться на мою единицу персистенции в ликвидазе, чтобы она могла сделать разницу.
<plugin>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-maven-plugin</artifactId>
<version>3.0.0-rc1</version>
<configuration>
<changeLogFile>src/main/resources/changelog/changelog-master.xml</changeLogFile>
<diffChangeLogFile>src/main/resources/db/migration/changelog-${project.version}.xml</diffChangeLogFile>
<driver>org.h2.Driver</driver>
<url>jdbc:h2:D:/work/06-database/my-database;</url>
<referenceUrl>src/main/resources/META-INF/persistence.xml</referenceUrl>
<referenceDriver>org.h2.Driver</referenceDriver>
<username>sa</username>
<password></password>
</configuration>
</plugin>
Я пытался с помощью liquibase-hibernate
расширение, как предлагается в сообщении в блоге: http://thecliftonian.wordpress.com/2012/04/05/liquibase-2-0-3-with-hibernate-3-5-6-and-annotations/ путем обновления referenceUrl: <referenceUrl>persistance:my-persistance-unit</referenceUrl>
но у меня есть это исключение:
Error setting up or running Liquibase: liquibase.exception.DatabaseException: Connection could not be created to src/main/resources/META-INF/persistence.xml with driver org.h
2.Driver. Possibly the wrong driver for the given database URL
Итак, мой вопрос: как ссылаться на имя единицы персистентности в Liquibase?
Есть ли лучший способ добиться этого?
Обновление: Javadoc ReferenceURl говорит:
The reference database URL to connect to for executing Liquibase. If performing a diff against a Hibernate config xml file, then use <b>"hibernate:PATH_TO_CONFIG_XML"</b> as the URL. The path to the hibernate configuration file can be relative to the test classpath for the Maven project."
1 ответ
Сообщение из блоба, на которое вы ссылались, выглядит так, как будто у них есть обходной путь, требующий исправленной версии интеграции, но хотя их запрос на извлечение был перенесен в кодовую базу liquibase-hibernate, я не верю, что он превратился в релиз, так что вам нужно будет сделать собственную сборку плагина самостоятельно.