Some corrections to Hibernate tutorial

Hibernate logo
I was referring to the First application at Hibernate (Jboss) offical documentation. I found some problems when doing the exercise: just want to share some of my findings so others may benefit.

1) dependency version missing: there are already some some discussions on the Hibernate discussion forum, such as this one and that one. I followed the first one: added the version numbers as suggested and the problem went away.

2) jdbc driver can not be found, the fix is to

mvn install:install-file -DgroupId=hsqldb -DartifactId=hsqldb -Dversion=1.8.1.2 -Dpackaging=jar -Dfile=/path/to/your/hsqldb.jar

in my case (mac) this is /Users/major_xu/Downloads/hsqldb/lib/hsqldb.jar

I saw discussion on this one, too, the suggestion is to “add classpath for hsqldb.jar”. But I don’t know how to do it in maven command line.

3) misc: there are a lot other corrections:

mapping in Hibernate configuration, the tutorial says
< mapping resource="events/Event.hbm.xml"/ >
< mapping resource="events/Person.hbm.xml"/ >

It should follow the format of earlier “hibernate.cfg.xml” instead, and no need to include Event.hbm.xml twice.
< mapping resource="org/hibernate/tutorial/domain/Event.hbm.xml"/ >

By the same token, “Person.hbm.xml” should be placed in the same place as “Event.hbm.xml”

Person.java: need to add getter and setter method for “id” and “age”. Otherwise, I am getting an error like this:
Unable to instantiate default tuplizer [org.hibernate.tuple.entity.PojoEntityTuplizer]

EventManager.java: addPersonToEvent goes like this
private void addPersonToEvent(Long personId, Long eventId) {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();

Person aPerson = (Person) session.load(Person.class, personId);
Event anEvent = (Event) session.load(Event.class, eventId);
aPerson.getEvents().add(anEvent);

session.getTransaction().commit();
}

4. To be done:
I still need to make log4j work, and I’d like to have Eclipse working with Maven (right now Eclipse seems not like the extra java/main directory which is required by Maven).

Email me at minjie DOT xu AT gmail DOT com if you would like a copy of the code.

Appendix:

Setup Maven on Mac
http://maven.apache.org/download.html#Installation

(use the version you have at your mac, in my case 1.5.0)
export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home

http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html

HSQLDB server setup and DB manager
http://www.lulu.com/items/volume_62/1087000/1087191/3/print/Hibernate-Spring-Maven-Eclipse-Tutorial.pdf
do this in the hsqldb installation dir
java -cp ./lib/hsqldb.jar org.hsqldb.Server

and to see the database in action, run database manager UI (from the lib dir which has hsqldb.jar)
java -cp hsqldb.jar org.hsqldb.util.DatabaseManagerSwing

I used the above commands in stead of the Maven commands mentioned in the documentation.
mvn exec:java -Dexec.mainClass=”org.hsqldb.Server” -Dexec.args=”-database.0 file:target/data/tutorial”

Leave a Reply