我是新来的hibernate者,很沮丧。在我的数据库中,我的表的列为TIMESTAMP(6)。我使用NetBeans 6.5.1当我生成hibernate.reveng.xml,hbm.xml files和pojo files它设置的列是类型Serializable。这不是我期望的,也不是我希望他们成为的。
TIMESTAMP(6)
hibernate.reveng.xml
hbm.xml files
pojo files
Serializable
我在hibernate论坛上找到了这篇文章,并说:
<sql-type jdbc-type="OTHER" hibernate-type="java.sql.Timestamp" />
在hibernate.reveng.xml文件中。
在Netbeans中,您无法从该文件生成映射(每次都会创建一个新映射),并且它似乎也无法从该文件重新生成映射(至少根据此文件已定在版本7中可用)。
因此,我试图弄清楚该怎么做。我更倾向于相信自己做错了,因为我对此并不陌生,对于其他人来说,这似乎是一个普遍的问题。
我正在使用Netbeans 6.5,Oracle 10G,并且我相信Hibernate 3(它是随Netbeans一起提供的)。
更新: 我正在使用的Oracle jdbc驱动程序(ojdbc14.jar)是9.0.2.0.0,我现在也尝试过:
我找到了解决此问题的方法。问题本身似乎与以下事实有关:Netbeans 6.5(直到现在是我的更高版本)不允许您从现有hibernate.reveng.xml文件对数据库进行反向工程。该版本预定在版本7中可用。
我发现的解决方法是创建一个ant任务来重新创建hbm.xml和pojo java文件。我目前很想在进行清理和构建时发生这种情况,但是我将尝试寻找一种将其完全分离的方法,因为只有在数据库模式更改时才需要运行它。
hbm.xml
为此,尽管您需要进行编辑和构建,但仍需要编辑build.xml文件。
build.xml
第一部分是您将需要的库。因此添加:
<path id="toolslib"> <path location="lib/hibernate-support/hibernate-tools.jar" /> <path location="lib/hibernate-support/hibernate3.jar" /> <path location="lib/hibernate-support/freemarker.jar" /> <path location="lib/hibernate-support/jtidy-r938.jar" /> <path location="lib/ojdbc14.jar" /> </path>
您的机器上应该已经有hibernate- tools.jar,hibernate3.jar和ojdbc14.jar文件。因此,只需更改它们的路径即可。该freemaker.jar和jtidy-r938.jar将需要下载的,因为我没有那些。
在此之下,build.xml您需要添加:
<taskdef name="hibernatetool" classname="org.hibernate.tool.ant.HibernateToolTask" classpathref="toolslib"> <classpath> <fileset dir="lib"> <include name="**/*.jar"/> </fileset> </classpath> </taskdef>
您将需要的最后一部分是在清理后部分中运行的集:
<target name="-post-clean"> <delete dir="src/*Put the foler where your pojos and hbm.xml files are located*"/> <hibernatetool> <jdbcconfiguration configurationfile="src\hibernate.cfg.xml" packagename="*the package where you want them recreated*" revengfile="src\hibernate.reveng.xml" detectmanytomany="true" /> <hbm2hbmxml destdir="src" /> <hbm2java destdir="src" /> </hibernatetool> </target>
configurationfile
com.stackoverflow.pojo
revengfile
hbm2hbmxml
hbm2java
现在,要使Oracle时间戳记不是Serializable,请编辑hibernate.reveng.xml文件并添加:
<type-mapping> <sql-type jdbc-type="OTHER" hibernate-type="java.sql.Timestamp" /> </type-mapping>
在schema-selection标签之后。
因此,整洁的构建和时间戳不会java.sql.Timestamp代替Serializable对象。
java.sql.Timestamp
我知道这是一个很长的答案,但是对于您必须在hibernate.reveng.xml文件中设置的任何其他更改(我认为),这也应该起作用。我不是hibernate专家,因此您的工作量可能与此不同。
更新: 所以经过一番谷歌搜索后,我发现了这个网站,有关Netbeans中的自定义蚂蚁任务。因此,我只是简单地将目标的名称更改为gen- dao,现在,每次执行清理和构建操作时,它就不会运行,而只是在我专门调用它时。
gen- dao