这算是很久之前遗留下的一个问题。在深入浅出Hibernate之前的例子里,曾经有用middlegen生成java代码,但是因为书里的例子是根据hibernate2来的,有些东西在hibernate3里找不到或是修改过了,所以ant hbm2java的时候怎么也不行,因为没有对应的Hbm2JavaTask这个类(好像是这个类名)。
于是就先放着了,现在在看最后面的项目时,发现也有这么一步,于是又想起来了,不知道的东西自己瞎找也找不到(对API啥的也不熟),就上网搜了。
原文地址:http://jackdown.blog.sohu.com/22335920.html
最近在看那个很火的《精通Hibernate》,发现里面都是针对hibernate2.1进行讲解了,但我们用的是hibernate3.1,很多地方都不一样,原来的那些hbm2ddl,hbm2java的脚本都不管用了,于是到处查资料,折腾了两天,终于搞定了,希望后来人不要再走弯路。
1.Hibernate-tools.jar这个包已经不像以前那么好找了,现在是放在hibernate-tools这个eclipse插件里面,用的时候要从里面搜索一下才能找到。
2.Hibernate-tools这个插件的用法,见官方网站的flash演示,使用非常方便。
Ant脚本已经跟2有很大差别了,这个我折腾了一天多,终于搞定了,贴出来大家看一下,更详细的信息可以看 http://www.hibernate.org/hib_docs/tools/ant/
Hbm2ddl:
<target name="hbm2ddl"> <taskdef name="hbm2ddl" classname="org.hibernate.tool.ant.HibernateToolTask" classpathref="project.class.path"/> <hbm2ddl destdir="${ schema.dir }"> <configuration configurationfile="${ source.root }/hibernate.cfg.xml" /> <hbm2ddl export="true" console="false" create="true" update="false" drop="false" outputfilename="bestunix.sql"/> </hbm2ddl> </target>
Hbm2java :
<target name="hbm2java"> <taskdef name="hbm2java" classname="org.hibernate.tool.ant.HibernateToolTask" classpathref="project.class.path"/> <hbm2java destdir="${ source.root }"> <configuration configurationfile="${ source.root }/hibernate.cfg.xml" /> <hbm2java generics="true" ejb3="false"/> <cfg2hbm/> </hbm2java> </target>
同时完成两个任务:
<target name="schemaexport"> <taskdef name="hibernatetool" classname="org.hibernate.tool.ant.HibernateToolTask" classpathref="project.class.path"/> <hibernatetool destdir="${ source.root }"> <configuration configurationfile="${ source.root }/hibernate.cfg.xml" /> <hbm2ddl export="true" console="false" create="true" update="false" drop="false" outputfilename="bestunix.sql"/> <hbm2java generics="true" ejb3="false"/> <cfg2hbm/> </hibernatetool> </target>
3. 用来生成html格式的数据库文档<hbm2doc>在ant脚本中好像暂时不行,还是要借助Hibernate-tool这个Eclipse插件来完成
4. 还有一些不明白的地方以后弄明白了再记
另外:
1.我只执行上面的hbm2java,运行的时候有报错说hbm.xml找不到。但是我明明在cfg文件里有些,路径是相对于根的全路径,但就是找不到,于是看了下控制台,大概就是说是不是确定在classpath里有这个文件。于是在path里加了<pathelement path="../src"/>才找到。
2.运行时的第二个问题是找不到freemarker/template/TemplateException这个类,在middlegen的lib包里加上freemarker的包。
3.报错大概说hbm2java没有generics这个属性,两个都去掉;hbm2java没有<cfg2hbm/>什么什么的,去掉;hibernatetool没有<cfg2hbm/>什么什么的,也去掉。
转载于:https://blog.51cto.com/1831651/1235639