标签: hibernate3-maven-plugin

使用Hibernate4/JPA 2.1在MAVEN版本中生成DDL脚本

似乎hibernate3-maven-plugin用于生成DDL创建/删除脚本的Hibernate 4.3版本与更新版本(使用JPA 2.1)不再兼容.

我使用这个插件配置:

            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>hibernate3-maven-plugin</artifactId>
                <version>3.0</version>
                <executions>
                    <execution>
                        <id>generate-sql-schema</id>
                        <phase>process-sources</phase>
                        <goals>
                            <goal>hbm2ddl</goal>
                        </goals>
                        <configuration>
                            <hibernatetool>
                                <jpaconfiguration persistenceunit="${persistenceUnitName}" />
                                <hbm2ddl update="true" create="true" export="false"
                                    outputfilename="src/main/sql/schema.sql" format="true"
                                    console="true" />
                            </hibernatetool>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

[ERROR] Failed to execute goal org.codehaus.mojo:hibernate3-maven-plugin:3.0:hbm2ddl (generate-sql-schema) on project my-project: There was an error creating the AntRun task.
An Ant BuildException has occured: java.lang.NoClassDefFoundError: org/hibernate/util/ReflectHelper: org.hibernate.util.ReflectHelper -> [Help 1]
Run Code Online (Sandbox Code Playgroud)

此类迁移到新包: org.hibernate.internal.util.ReflectHelper

但是我发现没有明确的方法可以在MAVEN版本中继续生成DDL创建脚本.

没有hibernate4-maven-plugin或任何其他官方方式来做到这一点.

所以呢 ?这不是一个应该支持的主要功能吗?怎么做 ?

ddl maven hibernate3-maven-plugin hibernate-4.x jpa-2.1

9
推荐指数
1
解决办法
1万
查看次数

从hibernate-maven-plugin 2.2版切换到3.0版时发生NullPointerException

我正在更新pom.xml依赖项的版本,当我从以下位置更改hibernate3-maven-plugin的版本时,我遇到了模糊的错误

<plugin>
    <!-- Run "mvn hibernate3:hbm2ddl" to generate schema -->
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>hibernate3-maven-plugin</artifactId>
    <version>2.2</version>
</plugin>
Run Code Online (Sandbox Code Playgroud)

<plugin>
    <!-- Run "mvn hibernate3:hbm2ddl" to generate schema -->
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>hibernate3-maven-plugin</artifactId>
    <version>3.0</version>
</plugin>
Run Code Online (Sandbox Code Playgroud)

使用2.2版,一切都可以成功编译,并且

mvn hibernate3:hbm2ddl
Run Code Online (Sandbox Code Playgroud)

从带注释的类创建正确的架构。

当我再次运行hbm2ddl命令时,仅更改版本只会导致以下错误:

[ERROR] Failed to execute goal org.codehaus.mojo:hibernate3-maven-plugin:3.0:hbm2ddl (default-cli) on project myProject: There was an error creating the AntRun task. NullPointerException -> [Help 1]
Run Code Online (Sandbox Code Playgroud)

完整的堆栈跟踪如下:

[ERROR] Failed to execute goal org.codehaus.mojo:hibernate3-maven-plugin:3.0:hbm2ddl (default-cli) on project myProject: There was an error creating the AntRun task. NullPointerException -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed …
Run Code Online (Sandbox Code Playgroud)

spring hibernate hbm2ddl maven hibernate3-maven-plugin

5
推荐指数
1
解决办法
3762
查看次数

休眠错误:在hbm2java代码上混合可为空和不可为空的属性

我正在使用hibernate3-maven-plugin来查询Oracle10g数据库并使用hbm2java目标生成带有JPA批注的Java类。然后,我使用spring配置一个会话工厂,该工厂扫描带注释的代码。

经过长时间的努力hbm2java,我设法生成了类,但现在又遇到了另一个问题:加载带注释的类时,出现“不允许在属性中混合可为空和不可为空的列”的异常。

数据库定义表FOO和BAR如下:

CREATE TABLE FOO (
  STATUS_CODE ... NOT NULL,
  REASON_CODE ...);

ALTER TABLE FOO ADD (
  CONSTRAINT FK_BAR
  FOREIGN KEY (REASON_CODE, STATUS_CODE)
  REFERENCES BAR(REASON_CODE, STATUS_CODE));

CREATE TABLE BAR (
  STATUS_CODE ... NOT NULL,
  REASON_CODE ... NOT NULL);

ALTER TABLE BAR (
  PRIMARY KEY (REASON_CODE, STATUS_CODE));
Run Code Online (Sandbox Code Playgroud)

因此,表FOO具有两列,它们是表BAR中的外键。列FOO.STATUS_CODE必须为非空,但列FOO.REASON_CODE可以为空。这里的逻辑是FOO需要一个状态,但并非每个状态都需要一个原因。

表BAR具有列BAR.REASON_CODE和BAR.STATUS_CODE,它们都不为空。此处的逻辑将各种(但不是全部)状态代码的原因关联在一起。因此,例如,如果状态为“已取消”,则原因可能是“欺诈”,“无能”等。

注意,诸如“活动”的状态没有任何关联的原因,因此在表BAR中不存在,但是它可以作为状态代码出现在表FOO中(没有关联的原因代码)。但是,如果FOO中的行的状态代码为“已取消”,则它还必须具有表BAR中为该状态定义的原因代码之一。

因此,表定义对我来说似乎不错(尽管我不是数据库专家)。

现在hbm2java,maven中的目标为表FOO生成以下代码:

private Bar bar;

@ManyToOne(fetch=FetchType.LAZY)
@JoinColumns( { 
    @JoinColumn(name="REASON_CODE", referencedColumnName="REASON_CODE"), 
    @JoinColumn(name="STATUS_CODE", referencedColumnName="STATUS_CODE", nullable=false) } )
public Bar getBar() {
    return …
Run Code Online (Sandbox Code Playgroud)

hibernate hbm2java hibernate-annotations hibernate3-maven-plugin

5
推荐指数
0
解决办法
1560
查看次数