Как создать схему базы данных Envers с помощью org.hibernate.tool.EnversSchemaGenerator? - PullRequest
4 голосов
/ 10 марта 2012

Я обновил Hibernate до версии 4.1.1.Final.Согласно документации Существует 2 способа создания схемы базы данных:

  1. Задача Ant org.hibernate.tool.ant.EnversHibernateToolTask.
  2. Запуск org.hibernate.tool.EnversSchemaGenerator из Java.

Hibernate-tools не работает с Hibernate-4.1.1.Final.У него ошибка блокировки .

Я нашел только заметки о выпуске и контрольный пример .Так как я могу использовать org.hibernate.tool.EnversSchemaGenerator с моими persistence.xml и Maven?

Обновление:

Найдена связанная ветка на форуме Hibernate .Кажется, пока нет ответа на мой вопрос.

Ответы [ 4 ]

10 голосов
/ 16 февраля 2014

Juplo создал Плагин Maven для Hibernate 4 . Плагин поддерживает экспорт схемы, включая Envers. Рабочий пример ниже. Проверьте официальную документацию по настройке плагина , чтобы получить объяснение используемых опций.

Плагин генерирует файл schema.sql в каталоге Maven /target для цели test. Или вы можете вручную запустить hibernate4:export goal для обновления файла.

<project>
    <build>
        <plugins>
            <plugin>
                <groupId>de.juplo</groupId>
                <artifactId>hibernate4-maven-plugin</artifactId>
                <version>1.0.3</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>export</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <envers>true</envers>
                    <format>true</format>
                    <delimiter>;</delimiter>
                    <force>true</force>
                    <type>CREATE</type>
                    <target>SCRIPT</target>
                    <hibernateDialect>org.hibernate.dialect.PostgreSQL9Dialect</hibernateDialect>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
4 голосов
/ 25 июля 2013

Вам не нужны инструменты Ant или Hibernate. Довольно просто использовать EnversSchemaGenerator напрямую, например:

Configuration config = new Configuration();

//make sure you set the dialect correctly for your database (oracle for example below)
config.setProperty("hibernate.dialect","org.hibernate.dialect.Oracle10gDialect");

//add all of your entities
config.addAnnotatedClass(MyAnnotatedEntity.class);

SchemaExport export = new EnversSchemaGeneHator(config).export();
export.execute(true, false, false, false);

Вы также можете дать ему имя файла для записи, но приведенный выше код все равно будет печататься в системном журнале.

2 голосов
/ 13 июля 2013

У меня сработало следующее:

public static void main(String[] args) {
    Ejb3Configuration jpaConfiguration = new Ejb3Configuration().configure("persistenceUnit", null);
    jpaConfiguration.buildMappings();
    Configuration hibernateConfiguration = jpaConfiguration.getHibernateConfiguration();
    AuditConfiguration.getFor(hibernateConfiguration);
    EnversSchemaGenerator esg = new EnversSchemaGenerator(hibernateConfiguration);
    org.hibernate.tool.hbm2ddl.SchemaExport se = esg.export();
    se.setOutputFile("sql/schema.sql");
    se.setFormat(true);
    se.setDelimiter(";");
    se.drop(true, false);
    se.create(true, false);
}
0 голосов
/ 31 марта 2013

У меня та же проблема. Теперь есть версия Hibernate 4 Tools:

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-tools</artifactId>
        <version>4.0.0-CR1</version>
    </dependency>

Но этот фрагмент Ant не экспортирует таблицы аудита, только "базовые" таблицы:

<target name="schema-export">
    <taskdef name="hibernatetool" classname="org.hibernate.tool.ant.EnversHibernateToolTask" classpathref="classpath"/>
    <hibernatetool destdir="sql">
        <classpath refid="classpath"/>
        <jpaconfiguration persistenceunit="persistenceUnit"/>
        <hbm2ddl export="false" create="true" drop="true" format="true" outputfilename="schema.sql"/>
    </hibernatetool>
</target>

То же самое с этим кодом: только таблицы "basic", нет таблиц "_aud":

public static void main(String[] args) {
    Ejb3Configuration jpaConfiguration = new Ejb3Configuration().configure("persistenceUnit", null);
    Configuration hibernateConfiguration = jpaConfiguration.getHibernateConfiguration();
    AuditConfiguration.getFor(hibernateConfiguration);
    EnversSchemaGenerator esg = new EnversSchemaGenerator(hibernateConfiguration);
    org.hibernate.tool.hbm2ddl.SchemaExport se = esg.export();
    se.setOutputFile("sql/schema.sql");
    se.setFormat(true);
    se.setDelimiter(";");
    se.drop(true, false);
    se.create(true, false);
}

Вы все еще заинтересованы? Я дам вам знать, если выясню, как решить проблему. Может быть, у кого-нибудь есть совет для нас?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...