研究Hibernate的同志们请关注一下:如何使用hbm2java.bat生成POJO?

紫翎观星 2004-12-07 11:44:10
我下载了hibernate2.1.6,Middlegen-Hibernate和Hibernate-Extensions,都安装在D:/根目录下。现在我已经用Middlegen-Hibernate将我的数据库中的表生成了对应的.hbm.xml映射文件,存在E:\HibSample\hibernate下。想用Hibernate-Extensions下tools/bin/hbm2java.bat来生成相应的POJO,但总报错如下:

信息: Generating 1 in E:\HibSample\
java.lang.NullPointerException
at net.sf.hibernate.tool.hbm2java.BasicRenderer.isPropertySet(BasicRenderer.j
at net.sf.hibernate.tool.hbm2java.BasicRenderer.generateConcreteEmptyClasses(
at net.sf.hibernate.tool.hbm2java.BasicRenderer.render(BasicRenderer.java:59)
at net.sf.hibernate.tool.hbm2java.Generator.write(Generator.java:138)
at net.sf.hibernate.tool.hbm2java.Generator.writeRecur(Generator.java:115)
at net.sf.hibernate.tool.hbm2java.Generator.generate(Generator.java:104)
at net.sf.hibernate.tool.hbm2java.CodeGenerator.main(CodeGenerator.java:125)

我在tools/bin/setenv.bat中配置如下:

@echo off

rem -------------------------------------------------------------------
rem Setup environment for hibernate tools
rem -------------------------------------------------------------------

set JDBC_DRIVER=D:\Middlegen-Hibernate\lib\mysql-connector-java-3.0.14-production-bin.jar
set HIBERNATE_HOME=D:\hibernate2.1.6

set CORELIB=%HIBERNATE_HOME%\lib
set LIB=..\lib
set PROPS=%HIBERNATE_HOME%\src
set CP=%JDBC_DRIVER%;%PROPS%;%HIBERNATE_HOME%\hibernate2.jar;%CORELIB%\commons-logging-1.0.4.jar;%CORELIB%\commons-collections-2.1.1.jar;%CORELIB%\commons-lang-1.0.1.jar;%CORELIB%\cglib-full-2.0.2.jar;%CORELIB%\dom4j-1.4.jar;%CORELIB%\odmg-3.0.jar;%CORELIB%\xml-apis.jar;%CORELIB%\xerces-2.4.0.jar;%CORELIB%\xalan-2.4.0.jar;%LIB%\jdom.jar;%LIB%\..\hibernate-tools.jar

应该没问题啊,请问任何解决这个问题?
...全文
1217 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
禽兽v5 2004-12-09
  • 打赏
  • 举报
回复
1.build.xml在你的项目目录下(此处假设目录名为MyProject),很多开源项目也这样做。项目结构如下:
MyProject<dir>
|--build.xml
|--codegen.xml
|--src<dir> -- 源代码(*.java)目录
|--lib<dir> -- 库目录,即jar文件的存放目录
|--classes<dir> -- 目的(*.class)目录

*.hbm.xml文件可以在项目目录下建立一个hbm文件夹放置。这里只需要这些文件在项目目录文件夹下即可,没什么特殊限制。

2.将hibernate-tools.jar复制到MyProject/lib目录。

3.build.xml
<project name="pjt" basedir="./" default="all">

<!--path-->
<path id="p">
<pathelement location="${classpath}"/>
<fileset dir="lib/">
<include name="**/*.jar"/>
</fileset>
</path>


<!--hbm 2 java-->
<target name="g" >
<taskdef name="g" classname="net.sf.hibernate.tool.hbm2java.Hbm2JavaTask" classpathref="p"/>

<g config="codegen.xml" output="src">
<fileset dir="src">
<include name="**/*.hbm.xml"/>
</fileset>
</g>
</target>

<target name="all" depends="g" />
</project>

4.codegen.xml
<?xml version="1.0" encoding="gbk"?>

<codegen>
<generate renderer="net.sf.hibernate.tool.hbm2java.BasicRenderer"/>
</codegen>
紫翎观星 2004-12-09
  • 打赏
  • 举报
回复
我在D:\Hibernate-Extensions\tools下运行了ant后,重新执行hbm2java E:\HibSample\HibSample\hibernate\*.xml --output=E:\HibSample\,又出现了新的问题:
Exception in thread "main" java.lang.NoClassDefFoundError: E:\HibSample\HibSample\hibernate\Person/hbm/xml
请大家帮我分析一下,谢谢。
紫翎观星 2004-12-09
  • 打赏
  • 举报
回复
TO:cm4ever(小P)

如果是这样,我应该在什么地方写build.xml文件?是在D:\Hibernate-Extensions\tools下修改build.xml,还是在E:\HibSample\hibernate或E:\HibSample下写新build.xml?具体怎么写Task?请指教。
禽兽v5 2004-12-09
  • 打赏
  • 举报
回复
rem 注意这里面的路径和真实路径可能不同!
call setenv.bat


另外,在ant中使用hbm2javaTask来生成java源代码比较方便。
紫翎观星 2004-12-09
  • 打赏
  • 举报
回复
TO:niyboy(JAVA爱好者)

我的hbm2java.bat里是这样写的:

@echo off

rem -------------------------------------------------------------------
rem Execute hbm2java tool
rem -------------------------------------------------------------------

call setenv.bat

java -cp %CP% net.sf.hibernate.tool.hbm2java.CodeGenerator %*

为什么会报空指针异常呢?
niyboy 2004-12-09
  • 打赏
  • 举报
回复
首先你要配置好hbm2java.bat中的参数,然后使用:

hbm2java E:\HibSample\HibSample\hibernate\*.xml --output=E:\HibSample\hibernate\

在DOS下执行,就可以看到你要的POJO了;


主要是hbm2java.bat中的参数要配置正确,否则就不会执行的;
禽兽v5 2004-12-09
  • 打赏
  • 举报
回复
不客气
紫翎观星 2004-12-09
  • 打赏
  • 举报
回复
成功了!多谢多谢!
禽兽v5 2004-12-09
  • 打赏
  • 举报
回复
java.lang.NoClassDefFoundError: net/sf/hibernate/MappingException
at net.sf.hibernate.tool.hbm2java.Hbm2JavaTask.processFile

估计你的包不全,你把所有需要的jar文件都放到lib目录,包括hibernate和hibernate extension tools的包。不怕多,就怕没有。
紫翎观星 2004-12-09
  • 打赏
  • 举报
回复
cm4ever(小P)非常的感谢你!

但是我按你说的做了,显示错误如下:

E:\HibSample>ant
Buildfile: build.xml

g:
[g] Processing 1 files.
[g] Building hibernate objects

BUILD FAILED
E:\HibSample\build.xml:33: Caused by:
Caused by:
java.lang.NoClassDefFoundError: net/sf/hibernate/MappingException
at net.sf.hibernate.tool.hbm2java.Hbm2JavaTask.processFile(Hbm2JavaTask.java:145)
at net.sf.hibernate.tool.hbm2java.Hbm2JavaTask.execute(Hbm2JavaTask.java:95)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:306)
at org.apache.tools.ant.Task.perform(Task.java:401)
at org.apache.tools.ant.Target.execute(Target.java:338)
at org.apache.tools.ant.Target.performTasks(Target.java:365)
at org.apache.tools.ant.Project.executeTarget(Project.java:1237)
at org.apache.tools.ant.Project.executeTargets(Project.java:1094)
at org.apache.tools.ant.Main.runBuild(Main.java:669)
at org.apache.tools.ant.Main.startAnt(Main.java:220)
at org.apache.tools.ant.launch.Launcher.run(Launcher.java:215)
at org.apache.tools.ant.launch.Launcher.main(Launcher.java:90)

at net.sf.hibernate.tool.hbm2java.Hbm2JavaTask.processFile(Hbm2JavaTask.java:149)
at net.sf.hibernate.tool.hbm2java.Hbm2JavaTask.execute(Hbm2JavaTask.java:95)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:306)
at org.apache.tools.ant.Task.perform(Task.java:401)
at org.apache.tools.ant.Target.execute(Target.java:338)
at org.apache.tools.ant.Target.performTasks(Target.java:365)
at org.apache.tools.ant.Project.executeTarget(Project.java:1237)
at org.apache.tools.ant.Project.executeTargets(Project.java:1094)
at org.apache.tools.ant.Main.runBuild(Main.java:669)
at org.apache.tools.ant.Main.startAnt(Main.java:220)
at org.apache.tools.ant.launch.Launcher.run(Launcher.java:215)
at org.apache.tools.ant.launch.Launcher.main(Launcher.java:90)


Total time: 1 second

请帮我分析一下好吗?谢谢!

我的Person.hbm.xml如下:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 2.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" >

<hibernate-mapping>
<!--
Created by the Middlegen Hibernate plugin 2.1

http://boss.bekk.no/boss/middlegen/
http://www.hibernate.org/
-->

<class
name="HibSample.hibernate.Person"
table="person"
>
<meta attribute="class-description" inherit="false">
@hibernate.class
table="person"
</meta>

<id
name="id"
type="java.lang.String"
column="id"
>
<meta attribute="field-description">
@hibernate.id
generator-class="assigned"
type="java.lang.String"
column="id"


</meta>
<generator class="assigned" />
</id>

<property
name="name"
type="java.lang.String"
column="name"
length="255"
>
<meta attribute="field-description">
@hibernate.property
column="name"
length="255"
</meta>
</property>
<property
name="address"
type="java.lang.String"
column="address"
length="255"
>
<meta attribute="field-description">
@hibernate.property
column="address"
length="255"
</meta>
</property>

<!-- Associations -->


</class>
</hibernate-mapping>
guojiafuzhuxi 2004-12-07
  • 打赏
  • 举报
回复
UP
紫翎观星 2004-12-07
  • 打赏
  • 举报
回复
还有,我在执行hbm2java E:\HibSample\HibSample\hibernate\*.xml --output=E:\HibSample\后,在E:\HibSample\HibSample\hibernate下是可以生成一个Person.java的,但里面一个字也没有。

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧