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
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:
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:The last section you will need is the set to run in the post-clean section:
configurationfile
points to your main configuration file.com.stackoverflow.pojo
for example).revengfile
is the reverse engineering xml file to use when creating the hbm and pojo files.hbm2hbmxml
will create thehbm.xml
files of your tables.hbm2java
will create the java pojo files of your tables.Now to get the Oracle Timestamps to be something other than
Serializable
, edit thehibernate.reveng.xml
file and add:just after the schema-selection tag.
So a clean and build and the timestamps will not be
java.sql.Timestamp
instead ofSerializable
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.I faced similar issue and resolved it by writing my own RevengNamingStrategy.
SqlTypes of TIMESTAMP_WITH_TIMEZONE and TIMESTAMP_WITH_LOCAL_TIMEZONE types are -101 and -102.And As there is no hibernate mapping types in java.sql.Types for these types,hence they are mapping to seralizable.
So Wrote my own RevengNamingStrategy,which converts these type to Timestamp.Which intern converts to hibernate TimeStampType.