Thursday, June 4, 2009

Hibernate 3 with Annotation Hands on with Example

I have worked with Hibernate2 where we had to define all configuration as well as Class to Table mapping though XML files. Hibernate 3 goes one step ahead and provides new ways to work
Where we can use annotation to define Class-Table mapping.

Hibernate3 supports annotation and requires Java 5 or above to function properly. While trying to work with Hibernate you will notice it has several dependencies to other third party jars, like
apache commons collections , apache commons logging.

I have tried to put all the required file in a zip file  and named it   "hibernate3AllJars" .

Since while playing around with codes which require some data base I prefer MySQL  since it is very easy to use and it is free. I have also putted the  MySQL JDBC Driver  mysql-connector-java-5.0.5-bin in the zip file.

If needed you can email me regarding the zip file.


For the Hands on I have created a Table in MySQL Database "sidd"  by executing the following command,

CREATE TABLE `honey` (
    ->   `id` int(11) NOT NULL auto_increment,
    ->   `name` varchar(100) default NULL,
    ->   `taste` varchar(100) default NULL,
    ->   PRIMARY KEY  (`id`)
    -> ) ENGINE=MyISAM ;



The table contains three column,  id, name and taste.


Now created the Honey POJO class , which is as follows,

package com.nefunda.java.hibernate.pojo;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;


@Entity
@Table(name="honey")
public class Honey {

    @Id
    @Column(name = "id")
    private int id;
   
    @Column(name = "name")
    private String name;

    @Column(name = "taste")
    private String taste;
   
   
    public int getId() {
        return id;
    }
   
    public void setId(int id) {
        this.id = id;
    }
   
    public String getName() {
        return name;
    }
   
    public void setName(String name) {
        this.name = name;
    }
   
    public String getTaste() {
        return taste;
    }
   
    public void setTaste(String taste) {
        this.taste = taste;
    }
   
}


With the help of annotations I have declared that this class is a persistent class and it is mapped with the table honey [@Table(name="honey")].

Now, mapped three members id, name and taste to corresponding columns of the honey table.


Without using annotation we would require to declare this  table-class relationship in a xml file as Follows,

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
  <class name="com.nefunda.java.hibernate.pojo.Honey" table="Honey">
   <id name="id" type="long" column="id" >
   <generator class="assigned"/>
  </id>

  <property name="name">
     <column name="name" />
  </property>
  <property name="taste">
    <column name="taste"/>
  </property>
 </class>
</hibernate-mapping>



1 comment :

  1. This is a nice tutorial, but can you make the look a bit more clear.

    Also can you guide with some sort of download link, from where I can download the source code or zip file?

    ~Somali

    ReplyDelete