我找到了一个解决方法。问题本身似乎围绕着Netbeans 6.5(以及此后的版本)不允许您从现有的
hibernate.reveng.xml
文件中反向工程化数据库。这将在7版中提供。
我发现的解决方法是创建一个ant任务来重新创建
hbm.xml
和pojo java文件。我目前已经将其挂钩在清理和构建时发生,但我将尝试找到一种完全分离的方式,因为它只需要在数据库架构更改时运行。
要完成此操作,请编辑
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>
您需要的最后一部分是在post-clean部分运行的设置:
<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>
- 删除部分将删除现有的hbm和pojo文件,然后重新创建。
configurationfile
指向您的主配置文件。
- 包名称是您想要创建的点分隔包(例如
com.stackoverflow.pojo
)。
revengfile
是在创建hbm和pojo文件时使用的反向工程xml文件。
hbm2hbmxml
将创建您的表的文件。
hbm2java
将创建您的表的java pojo文件。
现在,为了使Oracle Timestamps成为除Serializable
以外的其他内容,请编辑hibernate.reveng.xml
文件并添加:
<type-mapping>
<sql-type jdbc-type="OTHER" hibernate-type="java.sql.Timestamp" />
</type-mapping>
在模式选择标签之后进行清理和构建,时间戳将不再是
Serializable
对象,而是
java.sql.Timestamp
。
我知道这是一个长答案,但我认为这对于您必须在
hibernate.reveng.xml
文件中设置的任何其他更改也应该起作用(我想)。我不是Hibernate专家,所以您的结果可能会有所不同。
更新:经过一番搜索,我发现了Netbeans中自定义ant任务的
网站。所以我只需将目标的名称更改为
gen-dao
,现在每次进行清理和构建时它都不会运行,只有当我明确调用它时才会运行。