从数据库逆向工程 POJO 的最佳(最简单)方法是什么?我想从表中生成大约 40 个实体类,只是为了节省一堆打字。我想使用 Hibernate Tools 工具集,但所有示例似乎都不完整或相互矛盾 - 一些使用 Ant 任务的参考,一些参考 Maven 插件,以及 Jboss 站点本身表明 Hibernate Tools 4.x 现在似乎是一个 Eclipse 插件!
从头开始,这样做的“正确”方法是什么?
从数据库逆向工程 POJO 的最佳(最简单)方法是什么?我想从表中生成大约 40 个实体类,只是为了节省一堆打字。我想使用 Hibernate Tools 工具集,但所有示例似乎都不完整或相互矛盾 - 一些使用 Ant 任务的参考,一些参考 Maven 插件,以及 Jboss 站点本身表明 Hibernate Tools 4.x 现在似乎是一个 Eclipse 插件!
从头开始,这样做的“正确”方法是什么?
实际上,我最终使用了 Ant 任务。如果您需要从数据库对 POJO 进行逆向工程,并且您没有现有的基础设施,我相信 Ant 方法是最好的。我从这篇出色的博客文章开始,能够剪切和粘贴我需要的大部分代码。我通过实验发现需要一些额外的 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"
然后,您可以从原始 URL 下载 DTD并将其粘贴到您的“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
祝你好运!