我找到了解决这个问题的方法。问题本身似乎围绕着这样一个事实,即 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>
您需要的最后一部分是在清洁后部分运行的设置:
<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
将创建hbm.xml
您的表的文件。
- 这
hbm2java
将创建您的表的 java pojo 文件。
现在要使 Oracle Timestamps 不是Serializable
,请编辑hibernate.reveng.xml
文件并添加:
<type-mapping>
<sql-type jdbc-type="OTHER" hibernate-type="java.sql.Timestamp" />
</type-mapping>
就在模式选择标签之后。
所以一个干净的构建和时间戳不会java.sql.Timestamp
代替Serializable
对象。
我知道这是一个很长的答案,但这也适用于您必须在hibernate.reveng.xml
文件中设置的任何其他更改(我认为)。我不是休眠专家,因此您的里程可能会因此而有所不同。
更新:
所以经过一番谷歌搜索后,我发现了这个关于 Netbeans 中自定义 ant 任务的网站。所以我只是将目标的名称更改为gen-dao
,现在它不会在我每次进行清理和构建时运行,只是在我专门调用它时。