使用hibernate对pojos进行逆向工程的最佳方法

时间:2013-07-10 00:34:57

标签: java hibernate hibernate-tools

从数据库中反向设计POJO的最佳(最简单)方法是什么?我想从表中生成大概40个实体类,只是为了节省一堆打字。我想使用Hibernate Tools工具集,但所有示例看起来都不完整或矛盾 - 使用Ant任务的一些参考,一些参考Maven插件,以及Jboss站点本身表明Hibernate Tools 4.x现在似乎是一个Eclipse插件!

从头开始,“正确”的方法是什么?

3 个答案:

答案 0 :(得分:3)

我实际上使用了Ant任务。如果您需要从数据库中反向设计POJO,并且您没有现有的基础架构,我相信Ant方法是最好的。我从this excellent blog post开始,能够剪切并粘贴我需要的大部分代码。我通过实验发现需要一些额外的JAR,经过一些调整后能够以相当短的顺序生成我需要的POJO。

这假定您了解基本的Java术语和一些关于Ant的知识,并且已经安装了。这是步骤。

您需要创建两个文件(build.xml和hibernate.cfg.xml)并下载一些JAR。如果您在代理或防火墙后面,您可能还需要下载Hibernate DTD文件(因为Hibernate会尝试外出并读取DTD)。就是这样。

创建以下目录:

/myantproject
    /lib
    /src

在“myantproject”目录中,按如下方式创建 build.xml 文件:

<project name="antbuild" basedir="." default="gen_hibernate">

    <taskdef name="hibernatetool"
             classname="org.hibernate.tool.ant.HibernateToolTask">
        <classpath>
            <fileset dir="lib">
                <include name="**/*.jar"/>
            </fileset>
        </classpath>
    </taskdef>

    <target name="gen_hibernate"
            description="generate hibernate classes">
        <hibernatetool>

            <jdbcconfiguration
                    configurationfile="hibernate.cfg.xml"
                    packagename="com.mycompany.model"
                    detectmanytomany="true"
                    />
            <hbm2hbmxml destdir="src" />
            <hbm2java  destdir="src" />
        </hibernatetool>
    </target>

</project>

同样在“myantproject”目录中创建 hibernate.cfg.xml 文件,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"    >
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.driver_class">com.ibm.as400.access.AS400JDBCDriver</property>
        <property name="hibernate.connection.url">jdbc:as400://myserver;libraries=MYLIB;dateformat=iso;timeformat=iso;prompt=false;naming=system;transaction isolation=none</property>
        <property name="hibernate.connection.username">myuser</property>
        <property name="hibernate.connection.password">mypassword</property>
        <property name="hibernate.dialect">org.hibernate.dialect.DB2400Dialect</property>
    </session-factory>
</hibernate-configuration>

如果您位于防火墙/代理后面,可以下载DTD将文件中的DTD引用更改为此(确保编辑它以指向您的实际文件位置):

"file:///mypath/myantproject/lib/hibernate-configuration-3.0.dtd"

然后您可以download the DTD from the original URL并将其粘贴在“lib”目录中。

以下是我结束的JAR。使用这些JAR,您应该能够运行此Ant任务,并且它将对您在“hibernate.cfg.xml”中指向的数据库中的所有表进行反向工程。

cglib-nodep-2.2.3.jar
commons-collections-3.2.1.jar
commons-logging-1.1.1.jar
dom4j-1.6.1.jar
freemarker-2.3.8.jar
hibernate-annotations-3.5.0-Final.jar
hibernate-commons-annotations-4.0.1.Final.jar
hibernate-configuration-3.0.dtd
hibernate-core-3.3.1.GA.jar
hibernate-entitymanager-4.2.0.Final.jar
hibernate-tools-3.2.3.GA.jar
jt400-6.6.jar
jtidy-r938.jar
log4j-1.2.16.jar
slf4j-api-1.7.5.jar

这些来自各种来源 - 大部分来自apache.org或hibernate.org。您将需要数据库供应商提供的数据库JDBC JAR(在本例中为IBM的AS400连接器jar)以连接到数据库。我也需要下载这些DTD,因为我在防火墙后面:

hibernate-mapping-3.0.dtd
hibernate-reverse-engineering-3.0.dtd
祝你好运!

答案 1 :(得分:1)

最好的是Hibernate工具,其次是Ant任务

答案 2 :(得分:0)

每当我需要逆向工程POJO

时,我都会关注此post