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(1982, 02, 20);
Profile profile=new Profile(1,"abc","abc@domain.com",date.getTime(),983234923);
session.save(profile);
session.getTransaction().commit();
}
}
Comments