我是新来的hibernate者,很沮丧。在我的数据库中,我的表的列为TIMESTAMP(6)
。我使用NetBeans
6.5.1当我生成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
文件对html" target="_blank">数据库进行反向工程。该版本预定在版本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>
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
文件中设置的任何其他更改(我认为),这也应该起作用。我不是hibernate专家,因此您的工作量可能与此不同。
更新:
所以经过一番谷歌搜索后,我发现了这个网站,有关Netbeans中的自定义蚂蚁任务。因此,我只是简单地将目标的名称更改为gen- dao
,现在,每次执行清理和构建操作时,它就不会运行,而只是在我专门调用它时。
问题内容: 如果数据库中有2列,例如。 如何告诉Hibernate通过varchar进行代码搜索? 在休眠映射字符串中,字符串被映射到nvarchar,并产生如下查询: 这非常糟糕,因为它导致索引扫描而不是索引查找操作(扫描所有索引节点而不是直接转到请求的节点) 由于代码用于数百万行以及几个索引和外键中,因此将代码从varchar更改为nvarchar会导致性能下降(IO操作更多,因为nvarch
问题内容: 警告 :请在下面查看我自己的答案。此问题是由10.2.0.4之外的类路径中存在的旧Oracle驱动程序引起的。问题解决了。这个问题的其余部分留给后代。 我一直在反对以下观点。这是从我的应用程序代码中提取的一个简单的POJO: 有一个String属性和一个CLOB列。当内容很短时(例如“ hello world”),它会持续存在。对于更长的字符串,我得到以下异常: 我将Hibernate
问题内容: 我有一个颜色枚举 我有包含它的MyEntity。 我已经有一个UserType来映射我的枚举。 您知道如何在Hibernate hbm.xml中映射枚举集吗? 我需要一个UserType还是最简单的方法? 谢谢 编辑: 只是为了说明一下,我正在寻找 hbm.xml 配置而不是@CollectionOfElements注释 问题答案: 我使用EnumSet映射线程中的解决方案,该解决方案
问题内容: 我有一堂课(我不能改变): 可能的映射如下所示: 这可以正常工作并映射到以下数据库表: 我的问题是,在hibernate状态下如何将这两个集合(和)映射到同一表中,从而为日志生成以下架构: 编辑 :我想保留Java代码并按原样设置语义。我正在寻找诸如鉴别器,公式或hibernateAPI扩展之类的东西,这些东西可以解决此问题而无需接触Java代码。可能有些事情(虚构的hibernate
问题内容: 什么和何时在休眠状态下使用DiscriminatorValue注释的最佳方案是什么? 问题答案: 这两个链接帮助我最了解继承概念: http://docs.oracle.com/javaee/6/tutorial/doc/bnbqn.html http://www.javaworld.com/javaworld/jw-01-2008/jw-01-jpa1.html?page=6 要了解
问题内容: 我需要在hibernate状态下禁用ONLY_FULL_GROUP_BY。这是我当前的会话工厂。我不确定如何在其中指定sql_mode =’‘。 问题答案: 我认为您可以在JDBC连接字符串中进行设置,例如