這算是很久之前遺留下的一個問題。在深入淺出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/>什麼什麼的,也去掉。