Hibernate- Defining table and columns for mapping


If you want to define customized name for the table and column, you have to use @Table and @Column annotations. @Table allows you to define the table, catalog, and schema names for your entity mapping.
If no @Table is defined the default values are used: the unqualified class name of the entity.

You can also define unique constraints to the table using the @UniqueConstraint annotation in conjunction with @Table

@Table(name="profile",
uniqueConstraints = {@UniqueConstraint(columnNames={"country", "state"})}
)


@Column annotation allows you to specify the column name to be pointed out in table.
Following are attribute of the @Column annotation
name="columnName";
boolean unique() default false;
boolean nullable() default true;
boolean insertable() default true;
boolean updatable() default true;
String columnDefinition() default "";
String table() default "";
int length() default 255;
int precision() default 0;
int scale() default 0;

example :
@Column(updatable = false, name = "fullname", nullable = false, length=50)
public String getName() { ... }


Demo
package domain;

import java.util.Date;

import javax.persistence.*;
import javax.persistence.Id;

@Entity
@Table(name="User_Profile")
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
    @Column(name="Profile_id")
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }
    @Column(name="Name")
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    @Column(name="Email")
    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
    @Column(name="DateOfBirth")
    public Date getDateOfBirth() {
        return dateOfBirth;
    }

    public void setDateOfBirth(Date dateOfBirth) {
        this.dateOfBirth = dateOfBirth;
    }
    @Column(name="Phone")
    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 classes to do that
        Calendar date=Calendar.getInstance();
        date.set(19820220);
        Profile profile=new Profile(1,"abc","abc@domain.com",date.getTime(),983234923);
        session.save(profile);
        session.getTransaction().commit();
    }
}



No comments:

Popular Posts