Hibrnate provides support for the annotations based mapping for the ORM(object relational mapping). You can use JPA annotations in hibernate to map the object to table. So , you don't require the *.hbm.xml file for the each entity to mapping in database. You can mix annotated persistent classes and classic hbm.cfg.xml declarations with the same SessionFactory.
You can however not declare a class several times (whether annotated or through hbm.xml). You cannot mix configuration strategies (hbm vs annotations) in an entity hierarchy either. Following annotaions are being used in the example;
@Entity declares the class as an entity (i.e. a persistent POJO class).
@Id declares the identifier property of this entity.
Other properties will be mapped by hibernate using convensions like column name, column type, table name etc.
Entity class
package domain;
import java.util.Date;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class Profile {
private int id;
private String name;
private String email;
private Date dateOfBirth;
private long phone;
public Profile() {
}
public Profile(int id, String name, String email, Date dateOfBirth,
long phone) {
super();
this.id = id;
this.name = name;
this.email = email;
this.dateOfBirth = dateOfBirth;
this.phone = phone;
}
@Id
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 getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Date getDateOfBirth() {
return dateOfBirth;
}
public void setDateOfBirth(Date dateOfBirth) {
this.dateOfBirth = dateOfBirth;
}
public long getPhone() {
return phone;
}
public void setPhone(long phone) {
this.phone = phone;
}
}
-----------------------------------------------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- Database connection settings -->
<property name="connection.driver_class">org.h2.Driver</property>
<property name="connection.url">jdbc:h2:~/test;TRACE_LEVEL_FILE=3</property>
<property name="connection.username">sa</property>
<property name="connection.password" />
<property name="connection.pool_size">1</property>
<property name="dialect">org.hibernate.dialect.H2Dialect</property>
<property name="current_session_context_class">thread</property>
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<property name="show_sql">true</property>
<property name="hbm2ddl.auto" >update</property>
<mapping class="domain.Profile"/>
</session-factory>
</hibernate-configuration>
--------------------------------------------------------------------------------------------------------------
import java.util.Calendar;
import org.hibernate.Session;
import org.hibernate.cfg.AnnotationConfiguration;
import domain.Profile;
public class Operations {
public static void main(String[] args) {
Session session = new AnnotationConfiguration().configure()
.buildSessionFactory().openSession();
session.beginTransaction();
//create the date object to represent date, use calendar classs to do that
Calendar date=Calendar.getInstance();
date.set(1982, 02, 20);
Profile profile=new Profile(1,"hemraj","hemraj@domain.com",date.getTime(),983234923);
session.save(profile);
session.getTransaction().commit();
}
}
Comments