How to map oracle timestamp to appropriate java type in hibernate?

hibernate, java, netbeans6.5, oracle10g

Solution

I found a work around for this problem. The issue itself seems to revolve around the fact that Netbeans 6.5 (and I later versions up to this point) do not allow you to reverse engineer a database from an existing `hibernate.reveng.xml` file. This is slated to be available in version 7.

The work around I found is to create an ant task to recreate the `hbm.xml` and pojo java files. I currently have this hooked to happen when I do a clean and build, but I am going to try to find a way to to have it completely separate, since it will only need to be ran when the database schema changes.

To accomplish this when you do a clean and build though you need to edit your `build.xml` file.

The first part is the libraries you will need. So add:

<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>

You should already have the hibernate-tools.jar, hibernate3.jar, and ojdbc14.jar files on you machine. So just change the path to them. The freemaker.jar and jtidy-r938.jar will need to be downloaded, as I did not have those.

Below this in the `build.xml` you will need to add:

<taskdef name="hibernatetool"
     classname="org.hibernate.tool.ant.HibernateToolTask"
     classpathref="toolslib">
    <classpath>
        <fileset dir="lib">
            <include name="**/*.jar"/>
        </fileset>
    </classpath>
</taskdef>

The last section you will need is the set to run in the post-clean section:

<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>

- The delete portion will delete the existing hbm and pojo files, before they are re-created.

- The `configurationfile` points to your main configuration file.

- The package name is the dot separated package you want them created in (`com.stackoverflow.pojo` for example).

- The `revengfile` is the reverse engineering xml file to use when creating the hbm and pojo files.

- The `hbm2hbmxml` will create the `hbm.xml` files of your tables.

- The `hbm2java` will create the java pojo files of your tables.

Now to get the Oracle Timestamps to be something other than `Serializable`, edit the `hibernate.reveng.xml` file and add:

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

just after the schema-selection tag.

So a clean and build and the timestamps will not be `java.sql.Timestamp` instead of `Serializable` objects.

This is a long answer I know, but this should also work for any other changes that you would have to set in the `hibernate.reveng.xml` file (I think). I am no expert in hibernate, so your mileage may vary with this.

UPDATE: So after some googling I found this site about custom ant tasks in Netbeans. So I simply changed the name of the target to be `gen-dao` and now it does not run every time I do a clean and build, just when I specifically invoke it.

Problem

I am new to hibernate and I am stumped. In my database I have tables that have a columns of `TIMESTAMP(6)`. I am using Netbeans 6.5.1 and when I generate the `hibernate.reveng.xml`, `hbm.xml files`, and `pojo files` it sets the columns to be of type `Serializable`. This is not what I expected, nor what I want them to be. I found this post on the hibernate forums saying to place: ``` <sql-type jdbc-type="OTHER" hibernate-type="java.sql.Timestamp" /> ``` in the `hibernate.reveng.xml` file. In Netbeans you are not able to generate the mappings from this file (it creates a new one every time) and it does not seem to have the ability to re-generate them from the file either (at least according to this it is slated to be available in version 7). So I am trying to figure out what to do. I am more inclined to believe I am doing something wrong since I am new to this, and it seems like it would be a common problem for others. - So what am I doing wrong? - If I am not doing anything wrong, how do I work around this? I am using Netbeans 6.5, Oracle 10G, and I believe Hibernate 3 (it came with my netbeans). Edit: Meant to say I found this stackoverflow question, but it is really a different problem. UPDATE: The oracle jdbc driver I was using (ojdbc14.jar) is 9.0.2.0.0 I have now also tried: - ojdbc14.jar version 10.2.0.4.0 - ojdbc6.jar version 11.2.0.1.0

Original source

Related problems