Обратный инженер DDL от сущностей JPA
Я играю с некоторыми вещами JPA, меняя сопоставления, чтобы увидеть,как они должны быть и т. д. Это элементарные эксперименты. Однако я не могу найти инструмент, который будет просто читать мои органы, а затем создать схему для меня. Я попытался найти что-то подобное в инструментах JBoss, но нада. Интеграция Eclipse будет огромным плюсом, но я возьму инструмент командной строки или задачу ant.
какие идеи?
8 ответов
Я не думаю, что есть универсальный способ сделать это с JPA, вы должны напрямую использовать базовую реализацию JPA для достижения этого.
на спящий режим, есть несколько возможностей:
- используйте метод duffymo опубликовано ранее, что делает Hibernate автоматически обновлять схему базы данных.
- если вы этого не хотите, вы можете использовать hbm2ddl С спящий Инструменты (Примечание: ссылка отстой, но, по-видимому, их домашняя страница немного сломана прямо сейчас). Вы можете использовать это для автоматического создания сценариев создания базы данных из ваших сущностей JPA; есть также плагины для Maven и Ant, которые вызывают
hbm2ddl
автоматически.
на EclipseLink (ранее Oracle TopLink, JPA 2.0 RI) см. использование расширений EclipseLink JPA для генерации схемы. В принципе это очень похоже на Hibernate, хотя на первый взгляд я не вижу ничего, что можно было бы использовать в качестве автономной утилиты для создания сценария БД.
другие реализации JPA (BEA/Oracle Kodo, Apache OpenJPA), вероятно, имеют свои собственные конкретные методы достижения этого.
попробуйте добавить следующее к вашей настойчивости.в XML
Для Спящий Режим:
создать:
<property name="hibernate.hbm2ddl.auto" value="update"/>
падение и создание:
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
Для Toplink:
создать:
<property name="toplink.ddl-generation" value="create-tables"/>
падение и создание:
<property name="toplink.ddl-generation" value="drop-and-create-tables"/>
Для EclipseLink:
создать:
<property name="eclipselink.ddl-generation" value="create-tables"/>
падение и создание:
<property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
когда я использую Hibernate, я просто добавляю это в свой файл конфигурации:
<property name="hbm2ddl.auto">update</property>
заботится обо всем. Я не уверен, что эквивалент для JPA, но на него так сильно влияет Hibernate, что я был бы удивлен, если бы вы не смогли найти что-то подобное.
не требуется инструмент. Обычно я просто запускаю простой тест JUnit, и база данных создается для меня.
Я использую 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);
считается плохой формой установить "спящий режим".hbm2ddl.авто " на "обновление", так как автоматическое изменение производственной базы данных может ее нарушить. Для объяснения см. Hibernate hbm2ddl.авто возможные значения и что они делают?.
плагином 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>
DataNucleus имеет свой собственный SchemaTool, способный генерировать схему для вас или генерировать необходимые инструкции DDL для адаптации и применения.
--Энди (DataNucleus)
добавление в список Джеймса Макмахона:
Для OpenJPA:
<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>
Антонио Гонсалвес говорит в его блог об API для создания схемы.
В JPA 2.1 generateSchema для этой цели был введен метод.
пример из блог:
public class Main {
public static void main(String[] args) {
Persistence.generateSchema("samplePU", null);
}
}