What are the
different way hibernate provide support for primary keys?
Natural key and Surrogate Key
Natural key: Keys
are natural if the attribute it represents is used for identification
independently of the database schema.
What this basically means is that the keys are natural if people use
them example: username, email id etc
Surrogate Key: Surrogate
keys are keys that have no “business” meaning and are solely used to identify a
record in the table. Such keys are
either database generated (example: Identity in SQL Server, Sequence in Oracle,
Sequence/Identity in DB2 UDB etc.) or system generated values (like generated
via a table in the schema).
@Id @GeneratedValue(strategy=GenerationType.AUTO)
It is used to generate auto incremented id eg: 1,2,3,4.....
@Id
@GeneratedValue (strategy=GenerationType.AUTO) -> recommended option
@Id
@GeneratedValue (strategy=GenerationType.IDENTITY)
@Id
@GeneratedValue (strategy=GenerationType.SEQUENCE)
@Id
@GeneratedValue (strategy=GenerationType.TABLE)
AUTO: Indicates
that the persistence provider should pick an appropriate strategy for the
particular database.
IDENTITY:
Indicates that the persistence provider must assign primary keys for the entity
using database identity column.
SEQUENCE:
Indicates that the persistence provider must assign primary keys for the entity
using database sequence column.
TABLE: Indicates
that the persistence provider must assign primary keys for the entity using an
underlying database table to ensure uniqueness.
***************************************************************
hibernate.cfg.xml
<?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>
<property name="connection.driver_class">
org.postgresql.Driver
</property>
<property name="connection.url">
jdbc:postgresql://localhost:5433/hibernatedb
</property>
<property name="connection.username">postgres</property>
<property name="connection.password">admin</property>
<!-- JDBC
connection pool (use the built-in) -->
<property name="connection.pool_size">1</property>
<!-- SQL
dialect -->
<property name="dialect">
org.hibernate.dialect.PostgreSQLDialect
</property>
<!-- Enable
Hibernate's automatic session context management -->
<property name="current_session_context_class">thread</property>
<!-- Echo
all executed SQL to stdout -->
<property name="show_sql">true</property>
<!-- Drop
and re-create the database schema on startup -->
<property name="hbm2ddl.auto">create</property>
<!-- create / update -->
<!-- Names the annotated entity
class -->
<mapping class="org.yash.dto.UserDetails"/>
</session-factory>
</hibernate-configuration>
UserDetails.java
package org.yash.dto;
import java.util.Date;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="USER_DETAILS")
public class UserDetails {
/* @Id says
"userId" is primary key */
@Id @GeneratedValue
(strategy=GenerationType.AUTO)
private int userId;
private String userName;
private Date joinedDate;
private String Address;
private String description;
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public String
getUserName() {
return userName;
}
public void
setUserName(String userName) {
this.userName = userName;
}
public Date
getJoinedDate() {
return joinedDate;
}
public void
setJoinedDate(Date joinedDate) {
this.joinedDate = joinedDate;
}
public String
getAddress() {
return Address;
}
public void setAddress(String
address) {
Address = address;
}
public String
getDescription() {
return description;
}
public void
setDescription(String description) {
this.description = description;
}
}
HibernateTest.java
package org.yash.hibernate;
import java.util.Date;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.yash.dto.UserDetails;
public class HibernateTest {
public static void main(String
args[]){
UserDetails user
= new UserDetails();
user.setUserName("Third
User");
user.setAddress("Bentonville");
user.setJoinedDate(new Date());
user.setDescription("Description
of user goes here");
SessionFactory
sessionFactory = new Configuration().configure().buildSessionFactory();
Session session =
sessionFactory.openSession();
session.beginTransaction();
session.save(user);
session.getTransaction().commit();
user = null;
session =
sessionFactory.openSession();
session.beginTransaction();
user =
(UserDetails) session.get(UserDetails.class, 1);
System.out.println("User
name retrieved is "+user.getUserName());
}
}
************************************
No comments:
Post a Comment