休眠和Derby:hbm2dll 不创建序列

发布于 2024-12-21 08:36:56 字数 2741 浏览 3 评论 0 原文

我正在使用 hibernate3-maven-plugin 调用 hbm2ddl 来导出我的实体的 ddl。

然后,dbmaintain 使用此 ddl 文件来初始化嵌入式 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 );

The file does' t 包含任何有关序列的内容。

如果我不使用 dbmaintain 并仅将 hibernate.hbm2ddl.auto 设置为 update ,它就可以工作,但这不是我想在生产中使用的(正如大多数消息来源建议反对的那样)。

hbm2ddl 生成的 ddl 不应该包含 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>

I'm using the hibernate3-maven-plugin to call hbm2ddl to export the ddl for my entities.

This ddl file is then used by dbmaintain to initialize an embedded derby database.

But when I launch my Java Enterprise application with this database, I get the following error:

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

...which is correct, because the only code in the generated ddl file that is not directly related to my entities is the following:

create table hibernate_unique_key (
     next_hi integer 
);

insert into hibernate_unique_key values ( 0 );

The file doesn't contain anything about sequences.

It works if I don't use dbmaintain and just set hibernate.hbm2ddl.auto to update, but that's nothing I want to use in production (as most sources advice against it).

Shouldn't the ddl generated by hbm2ddl contain everything that is needed by hibernate?

Maven configuration:

<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>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

葬﹪忆之殇 2024-12-28 08:36:56

我终于弄清楚了:

问题是(最新)hibernate3-maven-plugin 已经完全过时了,无法处理我的 JPA 2.0 注释。

我通过调用 mvn -X hibernate3:hbm2ddl 获得了插件依赖项列表,并通过手动将插件的所有 hibernate 依赖项覆盖为最新版本来修复问题:

<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>

I was finally able to figure it out:

The problem was that the dependencies of the (latest) hibernate3-maven-plugin are completely outdated and could not handle my JPA 2.0 annotations.

I got a list of the plugin's dependencies by calling mvn -X hibernate3:hbm2ddl and fixed the problem by manually overriding all hibernate dependencies of the plugin to the latest versions:

<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>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文