Hibernate & Derby: hbm2dll не создает последовательности - PullRequest
0 голосов
/ 14 декабря 2011

Я использую hibernate3-maven-plugin для вызова hbm2ddl для экспорта ddl для моих сущностей.

Этот файл ddl затем используется dbmaintain для инициализации встроенной базы данных derby.

Но когда я запускаю свое приложение Java Enterprise с этой базой данных, я получаю следующую ошибку:

16:48:41.714 ERROR [main] o.h.util.JDBCExceptionReporter: SEQUENCE 'HIBERNATE_SEQUENCE' does not exist.

... это правильно, потому что единственный код в сгенерированном файле ddl, который не является напрямуюк моим сущностям относится следующее:

create table hibernate_unique_key (
     next_hi integer 
);

insert into hibernate_unique_key values ( 0 );

Файл не содержит ничего о последовательностях.

Он работает, если я не использую dbmaintain и просто задаю hibernate.hbm2ddl.autoна update, но это ничего, что я хочу использовать в производстве (как советуют большинство источников).

Разве не должен ddl, сгенерированный hbm2ddl, содержать все, что нужно для hibernate?

Конфигурация Maven:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>hibernate3-maven-plugin</artifactId>
        <configuration>
        <components>
            <component>
                <name>hbm2ddl</name>
                <implementation>jpaconfiguration</implementation>
            </component>
        </components>
        <componentProperties>
            <persistenceunit>MyPersistenceUnitName</persistenceunit>
            <outputfilename>schema.ddl</outputfilename>
            <drop>false</drop>
            <create>true</create>
            <export>false</export>
            <format>true</format>
        </componentProperties>
    </configuration>
</plugin>

persistence.xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence 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"
             version="2.0">
    <persistence-unit name="MyPersistenceUnitName">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <jta-data-source>java:app/jdbc/MyPersistenceUnitName</jta-data-source>
        <properties>
            <property name="hibernate.id.new_generator_mappings" value="true" />
            <property name="hibernate.dialect" value="org.hibernate.dialect.DerbyDialect" />
            <property name="javax.persistence.validation.group.pre-persist" value="some.ServerValidation" />
            <property name="javax.persistence.validation.group.pre-update" value="some.ServerValidation" />
        </properties>
    </persistence-unit>
</persistence>

1 Ответ

2 голосов
/ 14 декабря 2011

Я наконец смог понять это:

Проблема заключалась в том, что зависимости (последнего) hibernate3-maven-plugin полностью устарели и не могли обрабатывать мои аннотации JPA 2.0.

Я получил список зависимостей плагина, вызвав mvn -X hibernate3:hbm2ddl и исправил проблему, вручную переопределив все зависимости гибернации плагина до последних версий:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>hibernate3-maven-plugin</artifactId>
    <configuration>
        <components>
            <component>
                <name>hbm2ddl</name>
                <implementation>jpaconfiguration</implementation>
            </component>
        </components>
        <componentProperties>
            <persistenceunit>MyPersistenceUnitName</persistenceunit>
            <outputfilename>schema.ddl</outputfilename>
            <drop>false</drop>
            <create>true</create>
            <export>false</export>
            <format>true</format>
        </componentProperties>
    </configuration>
    <dependencies>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-tools</artifactId>
            <version>3.2.4.GA</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>3.6.8.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>3.6.3.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-annotations</artifactId>
            <version>3.5.6-Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>4.2.0.Final</version>
        </dependency>
    </dependencies>
</plugin>
...