如何在休眠状态下将Oracle时间戳映射到适当的Java类型?

雅各布·斯科恩(Jacob Schoen):

我是新来的冬眠者,很沮丧。在我的数据库中,我的表的列为TIMESTAMP(6)我使用NetBeans 6.5.1当我生成hibernate.reveng.xmlhbm.xml filespojo files它设置的列是类型Serializable这不是我期望的,也不是我希望他们成为的。

在休眠论坛上找到了这篇文章,并说:

<sql-type jdbc-type="OTHER" hibernate-type="java.sql.Timestamp" />

hibernate.reveng.xml文件中。

在Netbeans中,您无法从该文件生成映射(每次都会创建一个新映射),并且它似乎也无法从该文件重新生成映射(至少根据文件已定在版本7中可用)。

因此,我试图弄清楚该怎么做。我更倾向于相信自己做错了,因为我对此并不陌生,对于其他人来说,这似乎是一个普遍的问题。

  • 那我在做什么错?
  • 如果我没有做错任何事情,该如何解决?

我正在使用Netbeans 6.5,Oracle 10G,并且我相信Hibernate 3(它是随Netbeans一起提供的)。

编辑:意思是说我发现了这个 stackoverflow问题,但这确实是一个不同的问题。

更新:我正在使用的Oracle jdbc驱动程序(ojdbc14.jar)是9.0.2.0.0,我现在也尝试过:

  • ojdbc14.jar版本10.2.0.4.0
  • ojdbc6.jar版本11.2.0.1.0
雅各布·斯科恩(Jacob Schoen):

我找到了解决此问题的方法。问题本身似乎与以下事实有关: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.jarjtidy-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时间戳记不是Serializable,请编辑hibernate.reveng.xml文件并添加:

<type-mapping>
        <sql-type jdbc-type="OTHER" hibernate-type="java.sql.Timestamp" />
</type-mapping>

在schema-selection标签之后。

因此,整洁的构建和时间戳将java.sql.Timestamp代替Serializable对象。

我知道这是一个很长的答案,但是对于您必须在hibernate.reveng.xml文件中设置的任何其他更改(我认为),这也应该起作用我不是休眠专家,因此您的工作量可能与此不同。

更新:所以经过一番谷歌搜索后,我发现了这个网站,有关Netbeans中的自定义蚂蚁任务。因此,我只是简单地将目标的名称更改为gen-dao,现在,每次执行清理和构建操作时,它就不会运行,而只是在我专门调用它时。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在休眠状态下仅在UTC中存储特定的时间戳列

如何在休眠状态下仅删除@OneToOne双向映射的一侧

如何在休眠状态下将父类转换为继承的子类?

如何在休眠状态下建立友谊关系?

如何在休眠状态下基于ID更新行

如何在休眠状态下对实体进行本地修订?

如何在休眠状态下保存外键?

如何在休眠状态下使用UNION执行查询

如何在休眠状态下重用Criteria对象?

如何在休眠状态下指定Double的精度?

如何在休眠状态下进行乐观锁定

如何在休眠状态下编写联接查询

如何在休眠状态下使用SQL in()?

如何在休眠状态下更新表?

在休眠状态下,如何在具有复合键的2个表之间进行一对一映射?

如何在渲染时使用功能映射到状态下的每个项目中添加新字段值

scn如何在Oracle中使用sys.smon_scn_time映射到时间戳?

在休眠状态下创建外键映射

如何在状态下将 asc 更改为 desc?

如何在休眠状态下删除具有外键的行?

如何在休眠状态下检查是否存在具有不同ID的相同数据?

如何在休眠状态下使用条件转换mysql联接查询

如何在休眠状态下使用聚合函数编写查询?

如何在休眠状态下仅审计超类的一部分?

如何在休眠状态下获取远程数据库的数据

如何在休眠状态下持久保存子类的超类变量?

如何在休眠状态下重新生成已删除的序列号?

如何在休眠状态下持久存在实体期间验证对实体的约束

如何在休眠状态下检索数据库表值?