Недавно я кратко посмотрел на JPA, и мне было интересно, что такое сделка с миграциями схемы базы данных и оставаясь в очереди с созданными вами классами.
Есть ли поддержка в JPA для этого? Утилиты? Лучшие практики?
Ура!
Недавно я кратко посмотрел на JPA, и мне было интересно, что такое сделка с миграциями схемы базы данных и оставаясь в очереди с созданными вами классами.
Есть ли поддержка в JPA для этого? Утилиты? Лучшие практики?
Ура!
Я не буду полагаться на поставщиков JPA для обновления схемы базы данных. Проверьте Liquibase для одного из хороших подходов.
Короткий ответ нет.
Если вы измените свой beans, вам придется перенести существующую схему вручную. Поэтому для миграции баз данных стиля Rails вам придется искать в другом месте.
Однако вы можете легко создать начальную ddl с вашего Java beans. Пример ниже иллюстрирует создание схемы с 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"/>
Это говорит EclipseLink об отбрасывании существующих таблиц и генерации нового один раз из вашего JPA-сопоставления. Эта процедура отличается высокой спецификой для поставщиков, поэтому для других поставщиков JPA (Hibernate, OpenJPA...) вам придется проконсультироваться со своей конкретной документацией.
Если вы установите generateDdl
в Hibernate (если это базовая реализация), тогда он генерирует схему базы данных в соответствии с вашим текущим диалектом. Поэтому после изменения диалекта он автоматически генерирует базу данных.
Другие поставщики JPA могут иметь для этого разные свойства.