0% found this document useful (0 votes)
24 views77 pages

Hibernate

Hibernate note

Uploaded by

sourabhsuman425
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
24 views77 pages

Hibernate

Hibernate note

Uploaded by

sourabhsuman425
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 77

Web Application: Contains--

User Interface: Server Side:

Client Java program

Database:

Mysql, etc

Problem in JDBC:
Providing a Solution to common problem is called Framework
1. Connection problem
2. Conversion problem
3. Handling Resources problem
4. Compile Time errors
5. Dependent on database In your Company How you create project for java?

Ans. First you have to create: workspace folder and then you add java
folder inside workspace.
Hibernate Content:
Maven project
DTO
DAO
Hibernate:
Build Tools: Ant Project, Maven Project, Gradle Project
 ORM
 ORM Problem
 JPA What is Maven Project?
 Components of Hibernate Ans. Maven is chiefly used for Java-based projects, helping to
 CURD Operation download dependencies, which refers to the libraries or JAR
 Auto generation of Primary Key files. The tool helps get the right JAR files for each project as
 HQL there may be different versions of separate packages.
 Problem of relations
 Cache
 Criteria
How to create Maven Project in eclipse?

Ans. Ctrl+N -------write on Wizards: Maven---------select--------Maven Project--------Next>------Next>---------in Filter: -----search----

------org.apache.maven.archetypes---------Select ArtifactId---(maven-archetypes-quickstart) version-1.4--------

-----Next>------- fill GroupId: example-com.oehm5 Artifactid: FirstMavenApplication Package:this will auto generate i.e
com.oehm5.FirstMavenApplication------Finish

For creating any Maven Project ------ Internet Connection must be there

Java code is written

Here all test cases we check

Here we add all dependency in pom.xml file

Overview of the Maven Project

pom.xml: (pom stands for: Project Object Model)

 Here we add all dependency to the project that we required


 This is a fundamental component of the project
 It contain all information of the project

Maven:

Building a software project typically includes one or more of these activities as listed below:

1. Generating source code


2. Generating documentation from source code
3. Compiling Source code
4. Packing compiled code into jar or war files
5. Executing unit test cases

A build tool is a tool that automates everything related to building the software project.

Maven is a project management and a comprehension tool that provides developers a complete build lifecycle framework.
pom (stands for Project Object Model): It is the fundamental unit of work in maven , It contains information about the project and
various configuration details used by Maven to build the project. This will add .jar files in Maven Dependencies folder in your project
when adding dependency in pom.xml (Internet Connection must be there).

Framework: It provide solution to common problem

Example of framework: Angular, Hibernate, spring, Struts etc………….

Hibernate:
It is a framework which provides solution to common JDBC problems or ORM problem.
It uses internally JDBC.
Compile time is a Class
DTO (Data Transfer Object): And
Class Marvel
Runtime is an Object

Class Transformer Class Avengers

Marvel Object

Transfer Marvel Data

DTO (Data Transfer Object): It is used to transform data or exchange data from one class to another class.
DTO is also a class at compile time.

Rules to Make DTO class:


1. Non final class
2. Implements serializable
3. Private all properties
4. Setter and Getter methods
5. Default constructor(optional)
----------------------------------------------------------------------------------------------------------------------------------------------------------------
DAO (Data Access Object):
It is a class which is used to write persistence logic or Database logic.
DAO class all method are used for database operation or database logic.
It is used for perform CURD operation (Create, Read, Update and Delete).
To use Hibernate Functionality we need to add Hibernate dependency (Hibernate Core) in pom.xml under

<dependencies>

Here we add the dependency

</dependencies>

How to get dependency?


1. Connect to Internet
2. Go to www.google.com
3. Search for Maven Central Repository.
4. Click on searched list: Central Repository or Paste URL : https://mvnrepository.com/repos/central
5. Search in MVN Repository page : example : Hibernate Core
6. Go to : example: Hibernate Core Relocation
7. click the version which you want to add the dependency : example: 5.4.0.Final
8. copy the written part in <dependency> </dependency>
Example: <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.4.0.Final</version>
</dependency>

9. paste in pom.xml file between <dependencies> </dependencies>

.m2
Maven Central Repository

Whenever you we run the


application then it will search
.jar files in .m2 folder if it is not
present in .m2 folder then it will
link to Maven Central
Repository and it will download
to .m2 file
Video: 3
Make Entity class
Database
Class Movie {
movieId, movieId name language
name,
language,
casts,
rating,
releaseDate Help ORM
}

Movie table

ORM (Object Relation Mapping):

ORM are just guidelines


ORM allows us to persist the object into relational database without converting java object into values and vice versa.

For mapping we need to create Entity class


How to make Entity class?
Ans. Using Annotation:
1. @Entity
2. @Table(name=”name of the table”)
This two annotation Hibernate will understand data will map to particular Table in database

ORM Problems (when using JDBC connection):


1. Problem of relations
2. Problem of grain
3. Problem of navigation
4. Problem of inheritance
5. Problem of identity
Those who giving solution to ORM Problems they called as: ORM Tools - Examples: Hibernate, toplink, ibatis etc

Solution to ORM problems must follow standard or rule:


JPA (Java Persistence API):
1. JPA provides standard for ORM problem
2. JPA provides libraries and annotations for ORM
3. javax.persistence package is the standard JPA package
Components Of Hibernate: Video: 4
1. Configuration (class)
2. SessionFactory (interface)
3. Session (interface)
4. Transaction (interface)
(This is 4 Components of Hibernate by using this Component we use to perform Database operation)

1. Configuration(class): It is a basic component of Hibernate


 Provides connection properties (example: Configuration cfg = new Configuration();
cfg.configure();)
 Provides mapping information
 Get reference of SessionFactory
(example: SessionFactory sessionFactory = cfg.buildSessionFactory();)
Another class name
Mapping configuration information can be provided by two ways:
a) VariblenameofConfiguration.addAnnotatedClass (UserRegistration.class);
b) Through .xml(hibernate.cfg.xml) files: <mapping class="com.oehm5.hibernate.entity.UserRegistration"></mapping>

configure(): This method is used to load Hibernate Configuration file


The default name of Hibernate Configuration file is: hibernate.cfg.xml Qualified Name
This method is overloaded to provide name of Hibernate Configuration file.

addAnnotatedClass(Classname.class): It is used to provide mapping class.


This method takes entityclass.class as an input parameter
Note: Mapping class can be provided in .xml file by using mapping tag.
Video: 5
buildSessionFactory(): This method used to get reference of SessionFactory(interface).

2. SessionFactory(interface):
 SessionFactory is used to configures data base for an application
 Manages connection for an application(video 4---1:22:00 ---explanation)
 Gives the reference of Session
Note: SessionFactory should be created only once in an application
openSession(): This method is used to get the reference of Session.

3. Session(interface):
 Session is a live connection between our application and database.
 Using Session we can perform CURD operation.
 Using Session we can get reference of Transaction, Query and Criteria.
beginTransaction(): get the reference of Transaction
save(userRegisteration):
Reference of UserRegisteration class i.e. Entity class
4. Transaction(interface):
 Transaction is a boundary which consist of set of operations
 If above all the 3 steps successfully executed then we says as a Successful Transaction.
 If above any of 3 steps not successfully executed then we says as a Transaction Failed.
 Transaction as two things:
1. rollback()
2. commit()
 we need Transaction only when structure of table changes like Create, Insert , Update and Delete a record
 we need not require Transaction when we read(fetching) a record from Data Base
By default auto commit () is disabled in Hibernate. For enable auto commit () we have to write: TransactionReference.commit()
IdentifierGenerator(interface):
Video: 06
Method name: generate(): this is use to generate auto Id Number in DataBase.

@GenericGenerator(name = "user_auto", strategy = "increment")

Create implementation Object


This is used for MySQL

If strategy=”sequence”--- Oracle DataBase

IdentifierGenerator

strategy=”increment”

name=”user_auto”-------store Object Reference

@GeneratedValue(generator = "user_auto") --- This will call the method of generate() of IdentifierGenerator (interface)

Value inside generator must be same as what we provided name = “user_auto”


in @GenericGenerator(name = "user_auto", strategy = "increment")
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
Create: Maven Project -----hibernate

Overview of Maven Project i.e. hibernate


Now add dependency to pom.xml:

For Hibernate:

<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->


<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.4.0.Final</version>
</dependency>

For MySQL:

<!-- https://mvnrepository.com/artifact/com.mysql/mysql-connector-j -->


<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.0.32</version>
</dependency>

UserRegistration.java
package com.oehm5.hibernate.entity;

import java.io.Serializable;
@Entity
import javax.persistence.Column;
import javax.persistence.Entity; Entity classes are the fundamental building blocks of
import javax.persistence.GeneratedValue; systems that are developed correspond to database
import javax.persistence.Id; tables.
import javax.persistence.Table;

import org.hibernate.annotations.GenericGenerator;
This is used for Primary Key value
@Entity
@Table(name = "user_registeration")
public class UserRegistration implements Serializable {
@Id This annotation is used for auto update id
@GenericGenerator(name = "user_auto", strategy = "increment")
@GeneratedValue(generator = "user_auto")
by increasing 1 value each time in
@Column(name = "id") database
private Long id;

@Column(name = "user_name")
private String userName;

@Column(name = "password")
private String password;

@Column(name = "mobile_number")
private String mobileNumber;

@Column(name = "email")
private String email;

public Long getId() {


return id;
}

public void setId(Long id) {


this.id = id;
}

public String getUserName() {


return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}

public String getPassword() {


return password;
}

public void setPassword(String password) {


this.password = password;
}

public String getMobileNumber() {


return mobileNumber;
}

public void setMobileNumber(String mobileNumber) {


this.mobileNumber = mobileNumber;
}

public String getEmail() {


return email;
}

public void setEmail(String email) {


this.email = email;
}
}

We get this hibernate.cfg.xml file from: https://gist.github.com/yusufcakmak/aefef12a7fe4518043ec and do


changes as given below.
Or
Copy the text and paste in Notepad and give the file name: hibernate.cfg.xml

And paste in src/main/java in hibernate project

hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>


<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/framework_oehm5</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hbm2ddl.auto">update</property>
<property name="hibernate.show_sql">true</property>
</session-factory>
</hibernate-configuration>
RegisterDao.java
package com.oehm5.hibernate.dao;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

import com.oehm5.hibernate.entity.UserRegistration;

public class RegisterDao {

public void saveUser(UserRegistration userRegisteration) {


Configuration cfg = new Configuration();
cfg.configure(); // this load default name hibernate.cfg.xml file
or
cfg.configure("hibernate.cfg.xml");
cfg.addAnnotatedClass(UserRegistration.class);

SessionFactory sessionFactory = cfg.buildSessionFactory();

Session session = sessionFactory.openSession();

Transaction transaction = session.beginTransaction();

session.save(userRegisteration);
transaction.commit();
}
}

Create database in MySQL: framework_oehm5 ------- give table Name: user_registeration


App.java

package com.oehm5.hibernate;

import com.oehm5.hibernate.dao.RegisterDao;
import com.oehm5.hibernate.entity.UserRegistration;

public class App


{
public static void main( String[] args )
{
UserRegistration registeration = new UserRegistration();
registeration.setUserName("krishna@123");
registeration.setPassword("xyz");
registeration.setEmail("[email protected]");
registeration.setMobileNumber("8248696679");

RegisterDao registerDao = new RegisterDao();


registerDao.saveUser(registeration);
}
}

Open the App.java and right click----Run as -----1Java Application


In console:

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Updating Maven Project: hibernate
UserRegistration.java
package com.oehm5.hibernate.entity;

import java.io.Serializable;

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

import org.hibernate.annotations.GenericGenerator;

@Entity
@Table(name = "user_registeration")
public class UserRegistration implements Serializable {
@Id
@GenericGenerator(name = "user_auto", strategy = "increment")
@GeneratedValue(generator = "user_auto")
@Column(name = "id")
private Long id;

@Column(name = "user_name")
private String userName;

@Column(name = "password")
private String password;

@Column(name = "mobile_number")
private String mobileNumber;

@Column(name = "email")
private String email;

public Long getId() {


return id;
}
public void setId(Long id) {
this.id = id;
}

public String getUserName() {


return userName;
}

public void setUserName(String userName) {


this.userName = userName;
}

public String getPassword() {


return password;
}

public void setPassword(String password) {


this.password = password;
}

public String getMobileNumber() {


return mobileNumber;
}

public void setMobileNumber(String mobileNumber) {


this.mobileNumber = mobileNumber;
}

public String getEmail() {


return email;
}
This is added
public void setEmail(String email) {
this.email = email;
}

@Override
public String toString() {
return "UserRegistration [id=" + id + ", userName=" + userName + ", password=" + password + ", mobileNumber="
+ mobileNumber + ", email=" + email + "]";
}

}
RegisterDao.java
package com.oehm5.hibernate.dao;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

import com.oehm5.hibernate.entity.UserRegistration;

public class RegisterDao {

public void saveUser(UserRegistration userRegisteration) {


Configuration cfg = new Configuration();
cfg.configure();
cfg.addAnnotatedClass(UserRegistration.class);

SessionFactory sessionFactory = cfg.buildSessionFactory();

Session session = sessionFactory.openSession();

Transaction transaction = session.beginTransaction();

session.save(userRegisteration);
transaction.commit();
}

// Create a method which takes id as input and returns the object


public UserRegistration getUserById(Long id){

Configuration cfg = new Configuration();


cfg.configure(); This mapping is done on
//cfg.addAnnotatedClass(UserRegistration.class);
hibernate.cfg.xml file
SessionFactory sessionFactory = cfg.buildSessionFactory();

Session session = sessionFactory.openSession();

UserRegistration userRegistration =session.get(UserRegistration.class , id);


return userRegistration;
}

hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/framework_oehm5</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hbm2ddl.auto">update</property>
<property name="hibernate.show_sql">true</property>

<mapping class="com.oehm5.hibernate.entity.UserRegistration"></mapping>

</session-factory>
</hibernate-configuration>
App.java
package com.oehm5.hibernate;

import com.oehm5.hibernate.dao.RegisterDao;
//import com.oehm5.hibernate.entity.UserRegistration;

public class App


{
public static void main( String[] args )
{
// UserRegistration registeration = new UserRegistration();
// registeration.setUserName("krishna@123");
// registeration.setPassword("xyz");
// registeration.setEmail("[email protected]");
// registeration.setMobileNumber("8248696679");
//
RegisterDao registerDao = new RegisterDao();
// registerDao.saveUser(registeration);
System.out.println(registerDao.getUserById(1L));
}
}

No Changes in pom.xml, database (MySQL) i.e. framework_oehm5 and Overview of the Project (hibernate)

Run As----1JavaApplication in App.java

Output in Console:
UserRegistration [id=1, userName=krishna@123, password=xyz, mobileNumber=8248696679, [email protected]]

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Updating Maven Project: hibernate

Overview of Maven Project: hibernate


UserDto.java
package com.oehm5.hibernate.dto;

import java.io.Serializable;

public class UserDto implements Serializable {

private String userName;

private String password;

private String mobileNumber;

private String email;

public String getUserName() {


return userName;
}

public void setUserName(String userName) {


this.userName = userName;
}

public String getPassword() {


return password;
}

public void setPassword(String password) {


this.password = password;
}

public String getMobileNumber() {


return mobileNumber;
}

public void setMobileNumber(String mobileNumber) {


this.mobileNumber = mobileNumber;
}

public String getEmail() {


return email;
}

public void setEmail(String email) {


this.email = email;
}

}
RegisterDao.java
package com.oehm5.hibernate.dao;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

import com.oehm5.hibernate.dto.UserDto;
import com.oehm5.hibernate.entity.UserRegistration;

public class RegisterDao {

public void saveUser(UserRegistration userRegisteration) {


Configuration cfg = new Configuration();
cfg.configure();
cfg.addAnnotatedClass(UserRegistration.class);

SessionFactory sessionFactory = cfg.buildSessionFactory();

Session session = sessionFactory.openSession();

Transaction transaction = session.beginTransaction();

session.save(userRegisteration);
transaction.commit();
}

// Create a method which takes id as input and returns the object


public UserRegistration getUserById(Long id){

Configuration cfg = new Configuration();


cfg.configure();
//cfg.addAnnotatedClass(UserRegistration.class);

SessionFactory sessionFactory = cfg.buildSessionFactory();

Session session = sessionFactory.openSession();

UserRegistration userRegistration =session.get(UserRegistration.class , id);


return userRegistration;
}

//Update User record


public void updateUserDetailsById(Long id, UserDto userDto) {
UserRegistration userRegistration = getUserById(id);
if(userRegistration!=null) {
userRegistration.setMobileNumber(userDto.getMobileNumber());
userRegistration.setPassword(userDto.getEmail());
userRegistration.setEmail(userDto.getEmail());
userRegistration.setUserName(userDto.getUserName());

Configuration cfg = new Configuration();


cfg.configure();

SessionFactory sessionFactory = cfg.buildSessionFactory();

Session session = sessionFactory.openSession();

Transaction transaction = session.beginTransaction();

session.update(userRegistration);
transaction.commit();

}else {
System.out.println("There is no record exists for a id: "+id);
}
}
}
App.java
package com.oehm5.hibernate;

import com.oehm5.hibernate.dao.RegisterDao;
import com.oehm5.hibernate.dto.UserDto;
//import com.oehm5.hibernate.entity.UserRegistration;
//import com.oehm5.hibernate.entity.UserRegistration;

public class App


{
public static void main( String[] args )
{
// UserRegistration registeration = new UserRegistration();
// registeration.setUserName("krishna@123");
// registeration.setPassword("xyz");
// registeration.setEmail("[email protected]");
// registeration.setMobileNumber("8248696679");
//
RegisterDao registerDao = new RegisterDao();
// registerDao.saveUser(registeration);
/*UserRegistration userRegistration = registerDao.getUserById(1L);
System.out.println(userRegistration);*/
UserDto userDto = new UserDto();
userDto.setEmail("[email protected]");
userDto.setMobileNumber("9861443560");
userDto.setPassword("123");
userDto.setUserName("karan@987");

registerDao.updateUserDetailsById(1L,userDto);
}
}

hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/framework_oehm5</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hbm2ddl.auto">update</property>
<property name="hibernate.show_sql">true</property>

<mapping class="com.oehm5.hibernate.entity.UserRegistration"></mapping>

</session-factory>
</hibernate-configuration>
pom.xml
<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.4.0.Final</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.mysql/mysql-connector-j -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.0.32</version>
</dependency>
UserRegistration.java
package com.oehm5.hibernate.entity;

import java.io.Serializable;

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

import org.hibernate.annotations.GenericGenerator;

@Entity
@Table(name = "user_registeration")
public class UserRegistration implements Serializable {
@Id
@GenericGenerator(name = "user_auto", strategy = "increment")
@GeneratedValue(generator = "user_auto")
@Column(name = "id")
private Long id;

@Column(name = "user_name")
private String userName;

@Column(name = "password")
private String password;

@Column(name = "mobile_number")
private String mobileNumber;

@Column(name = "email")
private String email;

public Long getId() {


return id;
}

public void setId(Long id) {


this.id = id;
}

public String getUserName() {


return userName;
}

public void setUserName(String userName) {


this.userName = userName;
}

public String getPassword() {


return password;
}

public void setPassword(String password) {


this.password = password;
}
public String getMobileNumber() {
return mobileNumber;
}

public void setMobileNumber(String mobileNumber) {


this.mobileNumber = mobileNumber;
}

public String getEmail() {


return email;
}

public void setEmail(String email) {


this.email = email;
}

@Override
public String toString() {
return "UserRegistration [id=" + id + ", userName=" + userName + ", password=" + password + ",
mobileNumber="+ mobileNumber + ", email=" + email + "]";
}

Before Updating Record


Run As-------1JavaApplication

Updated Record
Why we need UserDto class we can use entity class i.e. UserRegistration also for Update the user detail in method
updateUserDetailsById?
Ans. We can use Entity class also but Entity class is used for different purpose and UserDto is used for
different purpose but at last we assign value to Entity class in updateUserDetailById method.

-----------------------------------------------------------------------------------------------------------

Update Maven Project----hibernate

Overview of Project: hibernate


RegisterDao.java
package com.oehm5.hibernate.dao;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

import com.oehm5.hibernate.dto.UserDto;
import com.oehm5.hibernate.entity.UserRegistration;

public class RegisterDao {

public void saveUser(UserRegistration userRegisteration) {


Configuration cfg = new Configuration();
cfg.configure();
cfg.addAnnotatedClass(UserRegistration.class);

SessionFactory sessionFactory = cfg.buildSessionFactory();

Session session = sessionFactory.openSession();

Transaction transaction = session.beginTransaction();

session.save(userRegisteration);
transaction.commit();
}

// Create a method which takes id as input and returns the object


public UserRegistration getUserById(Long id){

Configuration cfg = new Configuration();


cfg.configure();
//cfg.addAnnotatedClass(UserRegistration.class);

SessionFactory sessionFactory = cfg.buildSessionFactory();

Session session = sessionFactory.openSession();

UserRegistration userRegistration =session.get(UserRegistration.class , id);


return userRegistration;
}

//Update User record


public void updateUserDetailsById(Long id, UserDto userDto) {
UserRegistration userRegistration = getUserById(id);
if(userRegistration!=null) {
userRegistration.setMobileNumber(userDto.getMobileNumber());
userRegistration.setPassword(userDto.getEmail());
userRegistration.setEmail(userDto.getEmail());
userRegistration.setUserName(userDto.getUserName());

Configuration cfg = new Configuration();


cfg.configure();

SessionFactory sessionFactory = cfg.buildSessionFactory();

Session session = sessionFactory.openSession();

Transaction transaction = session.beginTransaction();


session.update(userRegistration);
transaction.commit();
}else {
System.out.println("There is no record exists for a id: "+id);
}
}
//Delete user detail
public void deleteUser(Long id) {
UserRegistration userRegistration = getUserById(id);
if(userRegistration!=null) {
Configuration cfg = new Configuration();
cfg.configure();

SessionFactory sessionFactory = cfg.buildSessionFactory();

Session session = sessionFactory.openSession();

Transaction transaction = session.beginTransaction();


session.delete(userRegistration);
transaction.commit();
}else {
System.out.println("There is no record exists for a id: "+ id);

}
}
App.java

package com.oehm5.hibernate;

import com.oehm5.hibernate.dao.RegisterDao;
//import com.oehm5.hibernate.dto.UserDto;
//import com.oehm5.hibernate.entity.UserRegistration;
//import com.oehm5.hibernate.entity.UserRegistration;

public class App


{
public static void main( String[] args )
{
// UserRegistration registeration = new UserRegistration();
// registeration.setUserName("krishna@123");
// registeration.setPassword("xyz");
// registeration.setEmail("[email protected]");
// registeration.setMobileNumber("8248696679");
//
RegisterDao registerDao = new RegisterDao();
// registerDao.saveUser(registeration);
/*UserRegistration userRegistration = registerDao.getUserById(1L);
System.out.println(userRegistration);*/

/*UserDto userDto = new UserDto();


userDto.setEmail("[email protected]");
userDto.setMobileNumber("9861443560");
userDto.setPassword("123");
userDto.setUserName("rahul@987");

registerDao.updateUserDetailsById(1L,userDto);*/

registerDao.deleteUser(1L);

}
}
UserRegistration.java

package com.oehm5.hibernate.entity;

import java.io.Serializable;

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

import org.hibernate.annotations.GenericGenerator;

@Entity
@Table(name = "user_registeration")
public class UserRegistration implements Serializable {
@Id
@GenericGenerator(name = "user_auto", strategy = "increment")
@GeneratedValue(generator = "user_auto")
@Column(name = "id")
private Long id;

@Column(name = "user_name")
private String userName;

@Column(name = "password")
private String password;

@Column(name = "mobile_number")
private String mobileNumber;

@Column(name = "email")
private String email;

public Long getId() {


return id;
}

public void setId(Long id) {


this.id = id;
}

public String getUserName() {


return userName;
}

public void setUserName(String userName) {


this.userName = userName;
}

public String getPassword() {


return password;
}

public void setPassword(String password) {


this.password = password;
}

public String getMobileNumber() {


return mobileNumber;
}

public void setMobileNumber(String mobileNumber) {


this.mobileNumber = mobileNumber;
}

public String getEmail() {


return email;
}

public void setEmail(String email) {


this.email = email;
}

@Override
public String toString() {
return "UserRegistration [id=" + id + ", userName=" + userName + ", password=" + password + ", mobileNumber="
+ mobileNumber + ", email=" + email + "]";
}
}
UserDto.java
package com.oehm5.hibernate.dto;

import java.io.Serializable;

public class UserDto implements Serializable {

private String userName;

private String password;

private String mobileNumber;

private String email;

public String getUserName() {


return userName;
}

public void setUserName(String userName) {


this.userName = userName;
}

public String getPassword() {


return password;
}

public void setPassword(String password) {


this.password = password;
}

public String getMobileNumber() {


return mobileNumber;
}

public void setMobileNumber(String mobileNumber) {


this.mobileNumber = mobileNumber;
}

public String getEmail() {


return email;
}

public void setEmail(String email) {


this.email = email;
}

}
hibernat.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/framework_oehm5</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hbm2ddl.auto">update</property>
<property name="hibernate.show_sql">true</property>

<mapping class="com.oehm5.hibernate.entity.UserRegistration"></mapping>

</session-factory>
</hibernate-configuration>

pom.xml

<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->


<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.4.0.Final</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.mysql/mysql-connector-j -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.0.32</version>
</dependency>

Before Execution of Program


Run As---1JavaApplication

Deleted the record

Create Maven Project: aadhar

Add dependency: pom.xml

<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->


<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.4.0.Final</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.mysql/mysql-connector-j -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.0.32</version>
</dependency>
PersonDetail.java
package com.oehm5.aadhar.entity;

import java.io.Serializable;

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

import org.hibernate.annotations.GenericGenerator;

@Entity
@Table(name="aadhar_detail")
public class PersonDetail implements Serializable {
@Id
@Column(name="aadhar_number")
@GenericGenerator(name="aadhar_numbers" ,strategy="increment")
@GeneratedValue(generator="aadhar_numbers")
private Long aadharnumber;
@Column(name="name")
private String name;
@Column(name="dob")
private String DOB;
@Column(name="sex")
private String sex;
@Column(name="mobile_number")
private String mobileNumber;

public Long getAadharnumber() {


return aadharnumber;
}

public void setAadharnumber(Long aadharnumber) {


this.aadharnumber = aadharnumber;
}

public String getName() {


return name;
}

public void setName(String name) {


this.name = name;
}

public String getDOB() {


return DOB;
}

public void setDOB(String dOB) {


DOB = dOB;
}

public String getSex() {


return sex;
}

public void setSex(String sex) {


this.sex = sex;
}

public String getMobileNumber() {


return mobileNumber;
}
public void setMobileNumber(String mobileNumber) {
this.mobileNumber = mobileNumber;
}

@Override
public String toString() {
return "PersonDetail [aadharnumber=" + aadharnumber + ", name=" + name + ", DOB=" + DOB + ",
sex=" + sex + ", mobileNumber=" + mobileNumber + "]";
}

}
RegisterDao.java
package com.oehm5.aadhar.dao;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

import com.oehm5.aadhar.dto.PersonDto;
import com.oehm5.aadhar.entity.PersonDetail;

public class RegisterDao {

private Configuration cfg = new Configuration().configure();

private SessionFactory sessionFactory = cfg.buildSessionFactory();

private Session session = sessionFactory.openSession();

public void saveAadharDetail(PersonDetail personDetail) {


// Configuration cfg = new Configuration();
// cfg.configure();
//
// SessionFactory sessionFactory = cfg.buildSessionFactory();
//
// Session session = sessionFactory.openSession();

Transaction transaction = session.beginTransaction();

session.save(personDetail);

transaction.commit();
}

public PersonDetail getPersonDetail(Long aadharNumber) {

// Configuration cfg = new Configuration();


// cfg.configure();
//
// SessionFactory sessionFactory = cfg.buildSessionFactory();
//
// Session session = sessionFactory.openSession();
//
PersonDetail personDetail = session.get(PersonDetail.class, aadharNumber );

return personDetail;

public void updatePersonDetail(Long aadharNumber, PersonDto personDto) {

PersonDetail personDetail = getPersonDetail(aadharNumber);


if(personDetail!= null) {
personDetail.setDOB(personDto.getDOB());
personDetail.setMobileNumber(personDto.getMobileNumber());
personDetail.setName(personDto.getName());
personDetail.setSex(personDto.getSex());

Transaction transaction = session.beginTransaction();


session.update(personDetail);
transaction.commit();

} else {
System.out.println(aadharNumber+" Aadhar Number is incorrect");
}
}

public void deletePersonDetail(Long aadharNumber) {


PersonDetail personDetail = getPersonDetail(aadharNumber);
if (personDetail!=null) {
Transaction transaction = session.beginTransaction();
session.delete(personDetail);
transaction.commit();
} else {
System.out.println(aadharNumber+" Aadhar Number is incorrect");

}
}

hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/framework_oehm5</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hbm2ddl.auto">update</property>
<property name="hibernate.show_sql">true</property>

<mapping class="com.oehm5.aadhar.entity.PersonDetail"></mapping>

</session-factory>
</hibernate-configuration>
PersonDto.java

package com.oehm5.aadhar.dto;

public class PersonDto implements Serializable{

private Long aadharnumber;


private String name;
private String DOB;
private String sex;
private String mobileNumber;

public Long getAadharnumber() {


return aadharnumber;
}
public void setAadharnumber(Long aadharnumber) {
this.aadharnumber = aadharnumber;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDOB() {
return DOB;
}
public void setDOB(String dOB) {
DOB = dOB;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getMobileNumber() {
return mobileNumber;
}
public void setMobileNumber(String mobileNumber) {
this.mobileNumber = mobileNumber;
}
}
Create Database: framework_oehm5 --- create Table: aadhar_detail
Overview of the Project: aadhar

App.java
package com.oehm5.aadhar;

import com.oehm5.aadhar.dao.RegisterDao;
//import com.oehm5.aadhar.dto.PersonDto;
import com.oehm5.aadhar.entity.PersonDetail;

public class App


{
public static void main( String[] args )
{
PersonDetail personDetail = new PersonDetail();
personDetail.setDOB("15/10/1998");
personDetail.setMobileNumber("9861443568");
personDetail.setName("krishna");
personDetail.setSex("male");
RegisterDao registerDao= new RegisterDao();
registerDao.saveAadharDetail(personDetail);

/*RegisterDao registerDao= new RegisterDao();


PersonDetail personDetail = registerDao.getPersonDetail(1L);
System.out.println(personDetail);*/

/*PersonDto personDto = new PersonDto();


personDto.setDOB("5/8/1997");
personDto.setMobileNumber("8249633498");
personDto.setName("Shyam prasad");
personDto.setSex("male");
RegisterDao registerDao= new RegisterDao();
registerDao.updatePersonDetail(377181783014L, personDto);*/

/*RegisterDao registerDao= new RegisterDao();


registerDao.deletePersonDetail(1L);*/

}
}
Run As-----1JavaApplication

Update on App.java

package com.oehm5.aadhar;

import com.oehm5.aadhar.dao.RegisterDao;
//import com.oehm5.aadhar.dto.PersonDto;
import com.oehm5.aadhar.entity.PersonDetail;

public class App {


public static void main( String[] args ){
/* PersonDetail personDetail = new PersonDetail();
personDetail.setDOB("15/10/1998");
personDetail.setMobileNumber("9861443568");
personDetail.setName("krishna");
personDetail.setSex("male");
RegisterDao registerDao= new RegisterDao();
registerDao.saveAadharDetail(personDetail);*/

RegisterDao registerDao= new RegisterDao();


PersonDetail personDetail = registerDao.getPersonDetail(1L);
System.out.println(personDetail);

/*PersonDto personDto = new PersonDto();


personDto.setDOB("5/8/1997");
personDto.setMobileNumber("8249633498");
personDto.setName("Shyam prasad");
personDto.setSex("male");
RegisterDao registerDao= new RegisterDao();
registerDao.updatePersonDetail(377181783014L, personDto);*/

/*RegisterDao registerDao= new RegisterDao();


registerDao.deletePersonDetail(1L);*/
}
}
Run As-----1JavaApplication

Update on App.java

package com.oehm5.aadhar;

import com.oehm5.aadhar.dao.RegisterDao;
import com.oehm5.aadhar.dto.PersonDto;
import com.oehm5.aadhar.entity.PersonDetail;

public class App {


public static void main( String[] args ){
/* PersonDetail personDetail = new PersonDetail();
personDetail.setDOB("15/10/1998");
personDetail.setMobileNumber("9861443568");
personDetail.setName("krishna");
personDetail.setSex("male");
RegisterDao registerDao= new RegisterDao();
registerDao.saveAadharDetail(personDetail);*/

/*RegisterDao registerDao= new RegisterDao();


PersonDetail personDetail = registerDao.getPersonDetail(1L);
System.out.println(personDetail);*/

PersonDto personDto = new PersonDto();


personDto.setDOB("5/8/1997");
personDto.setMobileNumber("8249633498");
personDto.setName("Shyam prasad");
personDto.setSex("male");
RegisterDao registerDao= new RegisterDao();
registerDao.updatePersonDetail(1L, personDto);

/*RegisterDao registerDao= new RegisterDao();


registerDao.deletePersonDetail(377181783013L);*/
}
}
Run As ---- 1JavaApplication

Update App.java

package com.oehm5.aadhar;

import com.oehm5.aadhar.dao.RegisterDao;
//import com.oehm5.aadhar.dto.PersonDto;
//import com.oehm5.aadhar.entity.PersonDetail;

public class App {


public static void main( String[] args ){
/* PersonDetail personDetail = new PersonDetail();
personDetail.setDOB("15/10/1998");
personDetail.setMobileNumber("9861443568");
personDetail.setName("krishna");
personDetail.setSex("male");
RegisterDao registerDao= new RegisterDao();
registerDao.saveAadharDetail(personDetail);*/

/*RegisterDao registerDao= new RegisterDao();


PersonDetail personDetail = registerDao.getPersonDetail(1L);
System.out.println(personDetail);*/

/*PersonDto personDto = new PersonDto();


personDto.setDOB("5/8/1997");
personDto.setMobileNumber("8249633498");
personDto.setName("Shyam prasad");
personDto.setSex("male");
RegisterDao registerDao= new RegisterDao();
registerDao.updatePersonDetail(1L, personDto);*/

RegisterDao registerDao= new RegisterDao();


registerDao.deletePersonDetail(1L);
}
}
Run As ---- 1JavaAppl

Ication

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

HQL (Hibernate Query Language):

user_registration

ID Email Password User_Name


1 [email protected] 123 abcd

2 b@outlook 345 xyz

If I want to fetch a all record then what query I will write in :


SQL: select * from user_registration;
HQL: from UserRegistration;

If I want to fetch record User_Name and Password what query I will write:
SQL: Select user_name, password from user_registration
HQL: select username,password form UserRegistration

If you want to execute any Query in SQL what should I required?


Ans. I need to know Table details, whenever we write a SQL query it is based on table structure not based in object model and it
is depended on DataBase

HQL (Hibernate Query Language): HQL we write a query in Object Model and it is independent of database.

public class UserRegistration implements Serializable{


This is entity class which is mapped to
private Long id;
Particular database so we will utilise
private String userName;
Entity class for HQL query
private String password;
private String email;
}
HQL: from UserRegistration (this will fetch all the record)

NOTE:

HQL (Hibernate Query Language):


HQL allows writing queries based on Object Model.
HQL is independent of database
HQL as similar syntax like SQL
Example: SQL: select * from user_registration like HQL : select * from UserRegistration or from UserRegistration
SQL: select user_name, password from user_registration like HQL: select username, password from UserRegistration

Notes: In HQL we use Entity class name instead of Table Name and Entity class properties name instead of Column Name

Video: 8

In HQL we need to take care of Extra 2 thing:


1. Get reference of query. ( Query query = session.createQuery(hql))
2. Process the query.( session.createQuery(hql))

Update query:
SQL: update user_registeration set mobile_number =123456789 where id = 100;
HQL: update UserRegisteration set mobilenumber =: m where id =: i;
Query query = session.createQuery(hql);
query.setParameter("m",newMobileNumber);
query.setParameter("i",id);

You should not use HQL query for insert operation because :
If you want to write insert query then in HQL: insert into UserRegistration (username, password, mobileNumber, email)
values (values1,values2,values3,values4);
the HQL query will become big so that’s why HQL query does not support Insert Operation if we try to do this then it will give Exception
Instead of that we have method” session.save(userRegisteration);”

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Update Maven Project --- hibernate
RegisterHqlDao.java
package com.oehm5.hibernate.dao;

import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.query.Query;

import com.oehm5.hibernate.entity.UserRegistration;

public class RegisterHqlDao {


public List<UserRegistration> getUsers() {
Configuration cfg = new Configuration();
cfg.configure();
SessionFactory sessionFactory = cfg.buildSessionFactory();
Session session = sessionFactory.openSession();
String hql ="from UserRegistration";
Query query = session.createQuery(hql);
return query.list();
}

public UserRegistration getUserByEmail(String email) {


Configuration cfg = new Configuration();
cfg.configure();
SessionFactory sessionFactory = cfg.buildSessionFactory();
Session session = sessionFactory.openSession();
String hql ="from UserRegistration where email=:e";
uniqueResult() to be used when you are
sure that it has only one record to fetch
Query query = session.createQuery(hql); otherwise it will give Exception
query.setParameter("e",email);

return (UserRegistration) query.uniqueResult();


}

public void updateMobileNumberById(String newMobileNumber,Long id) {


Configuration cfg = new Configuration();
cfg.configure();
SessionFactory sessionFactory = cfg.buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
String hql ="update UserRegistration set mobileNumber=:m where id=:i";

Query query = session.createQuery(hql);


query.setParameter("m",newMobileNumber);
query.setParameter("i",id);
int rows = query.executeUpdate();
if(rows!=0) {
System.out.println("Update Operation successfull");
} else {
System.out.println("Update Operation failed");
}
transaction.commit();
}
public void deleteUserById(Long id) {
Configuration cfg = new Configuration();
cfg.configure();
SessionFactory sessionFactory = cfg.buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
String hql ="delete from UserRegistration where id=:i";

Query query = session.createQuery(hql);


query.setParameter("i",id);
int rows = query.executeUpdate();
if(rows!=0) {
System.out.println("Delete Operation successfull");
} else {
System.out.println("Delete Operation failed");
}
transaction.commit();
}
}
RegisterDao.java(No changes)
package com.oehm5.hibernate.dao;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

import com.oehm5.hibernate.dto.UserDto;
import com.oehm5.hibernate.entity.UserRegistration;

public class RegisterDao {

public void saveUser(UserRegistration userRegisteration) {


Configuration cfg = new Configuration();
cfg.configure();
cfg.addAnnotatedClass(UserRegistration.class);

SessionFactory sessionFactory = cfg.buildSessionFactory();

Session session = sessionFactory.openSession();

Transaction transaction = session.beginTransaction();

session.save(userRegisteration);
transaction.commit();
}

// Create a method which takes id as input and returns the object


public UserRegistration getUserById(Long id){

Configuration cfg = new Configuration();


cfg.configure();
//cfg.addAnnotatedClass(UserRegistration.class);

SessionFactory sessionFactory = cfg.buildSessionFactory();

Session session = sessionFactory.openSession();

UserRegistration userRegistration =session.get(UserRegistration.class , id);


return userRegistration;
}

//Update User record


public void updateUserDetailsById(Long id, UserDto userDto) {
UserRegistration userRegistration = getUserById(id);
if(userRegistration!=null) {
userRegistration.setMobileNumber(userDto.getMobileNumber());
userRegistration.setPassword(userDto.getEmail());
userRegistration.setEmail(userDto.getEmail());
userRegistration.setUserName(userDto.getUserName());

Configuration cfg = new Configuration();


cfg.configure();

SessionFactory sessionFactory = cfg.buildSessionFactory();

Session session = sessionFactory.openSession();

Transaction transaction = session.beginTransaction();


session.update(userRegistration);
transaction.commit();

}else {
System.out.println("There is no record exists for a id: "+id);
}
}
//Delete user detail
public void deleteUser(Long id) {
UserRegistration userRegistration = getUserById(id);
if(userRegistration!=null) {
Configuration cfg = new Configuration();
cfg.configure();

SessionFactory sessionFactory = cfg.buildSessionFactory();

Session session = sessionFactory.openSession();

Transaction transaction = session.beginTransaction();


session.delete(userRegistration);
transaction.commit();
}else {
System.out.println("There is no record exists for a id: "+ id);

}
}

UserDto.java(NO changes)
package com.oehm5.hibernate.dto;

import java.io.Serializable;

public class UserDto implements Serializable {

private String userName;

private String password;

private String mobileNumber;

private String email;

public String getUserName() {


return userName;
}

public void setUserName(String userName) {


this.userName = userName;
}

public String getPassword() {


return password;
}

public void setPassword(String password) {


this.password = password;
}

public String getMobileNumber() {


return mobileNumber;
}

public void setMobileNumber(String mobileNumber) {


this.mobileNumber = mobileNumber;
}

public String getEmail() {


return email;
}

public void setEmail(String email) {


this.email = email;
}

}
UserRegistration.java(No changes)
package com.oehm5.hibernate.entity;

import java.io.Serializable;

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

import org.hibernate.annotations.GenericGenerator;

@Entity
@Table(name = "user_registeration")
public class UserRegistration implements Serializable {
@Id
@GenericGenerator(name = "user_auto", strategy = "increment")
@GeneratedValue(generator = "user_auto")
@Column(name = "id")
private Long id;

@Column(name = "user_name")
private String userName;

@Column(name = "password")
private String password;

@Column(name = "mobile_number")
private String mobileNumber;

@Column(name = "email")
private String email;

public Long getId() {


return id;
}

public void setId(Long id) {


this.id = id;
}

public String getUserName() {


return userName;
}

public void setUserName(String userName) {


this.userName = userName;
}

public String getPassword() {


return password;
}

public void setPassword(String password) {


this.password = password;
}

public String getMobileNumber() {


return mobileNumber;
}

public void setMobileNumber(String mobileNumber) {


this.mobileNumber = mobileNumber;
}
public String getEmail() {
return email;
}

public void setEmail(String email) {


this.email = email;
}

@Override
public String toString() {
return "UserRegistration [id=" + id + ", userName=" + userName + ", password=" + password + ",
mobileNumber="
+ mobileNumber + ", email=" + email + "]";
}
}
App.java
package com.oehm5.hibernate;

import java.util.List;

//import com.oehm5.hibernate.dao.RegisterDao;
import com.oehm5.hibernate.dao.RegisterHqlDao;
//import com.oehm5.hibernate.dto.UserDto;
import com.oehm5.hibernate.entity.UserRegistration;
//import com.oehm5.hibernate.entity.UserRegistration;

public class App


{
public static void main( String[] args )
{
/*UserRegistration registeration = new UserRegistration();
registeration.setUserName("rajkumar@123");
registeration.setPassword("123");
registeration.setEmail("[email protected]");
registeration.setMobileNumber("9776948292");

RegisterDao registerDao = new RegisterDao();


registerDao.saveUser(registeration);*/

/*UserRegistration userRegistration = registerDao.getUserById(1L);


System.out.println(userRegistration);*/
/*UserDto userDto = new UserDto();
userDto.setEmail("[email protected]");
userDto.setMobileNumber("9861443560");
userDto.setPassword("123");
userDto.setUserName("rahul@987");

registerDao.updateUserDetailsById(1L,userDto);*/

/* registerDao.deleteUser(1L);*/

RegisterHqlDao registerHqlDao = new RegisterHqlDao();


List<UserRegistration> list = registerHqlDao.getUsers();
list.forEach(user->{
System.out.println(user);
});

/*RegisterHqlDao registerHqlDao = new RegisterHqlDao();


UserRegistration userRegistration = registerHqlDao.getUserByEmail("[email protected]");
System.out.println(userRegistration);*/

/*RegisterHqlDao registerHqlDao = new RegisterHqlDao();


registerHqlDao.updateMobileNumberById("725689124", 2L);*/

/*RegisterHqlDao registerHqlDao = new RegisterHqlDao();


registerHqlDao.deleteUserById(2L);*/

}
}
Run As---1JavaApplication
App.java
package com.oehm5.hibernate;

//import java.util.List;

//import com.oehm5.hibernate.dao.RegisterDao;
import com.oehm5.hibernate.dao.RegisterHqlDao;
//import com.oehm5.hibernate.dto.UserDto;
import com.oehm5.hibernate.entity.UserRegistration;
//import com.oehm5.hibernate.entity.UserRegistration;

public class App


{
public static void main( String[] args )
{
/*UserRegistration registeration = new UserRegistration();
registeration.setUserName("rajkumar@123");
registeration.setPassword("123");
registeration.setEmail("[email protected]");
registeration.setMobileNumber("9776948292");

RegisterDao registerDao = new RegisterDao();


registerDao.saveUser(registeration);*/

/*UserRegistration userRegistration = registerDao.getUserById(1L);


System.out.println(userRegistration);*/
/*UserDto userDto = new UserDto();
userDto.setEmail("[email protected]");
userDto.setMobileNumber("9861443560");
userDto.setPassword("123");
userDto.setUserName("rahul@987");

registerDao.updateUserDetailsById(1L,userDto);*/

/* registerDao.deleteUser(1L);*/

/* RegisterHqlDao registerHqlDao = new RegisterHqlDao();


List<UserRegistration> list = registerHqlDao.getUsers();
list.forEach(user->{
System.out.println(user);
});*/

RegisterHqlDao registerHqlDao = new RegisterHqlDao();


UserRegistration userRegistration = registerHqlDao.getUserByEmail("[email protected]");
System.out.println(userRegistration);

/*RegisterHqlDao registerHqlDao = new RegisterHqlDao();


registerHqlDao.updateMobileNumberById("725689124", 2L);*/

/*RegisterHqlDao registerHqlDao = new RegisterHqlDao();


registerHqlDao.deleteUserById(2L);*/

}
} Run As----1JavaApplication
App.java
package com.oehm5.hibernate;

//import java.util.List;

//import com.oehm5.hibernate.dao.RegisterDao;
import com.oehm5.hibernate.dao.RegisterHqlDao;
//import com.oehm5.hibernate.dto.UserDto;
//import com.oehm5.hibernate.entity.UserRegistration;
//import com.oehm5.hibernate.entity.UserRegistration;

public class App


{
public static void main( String[] args )
{
/*UserRegistration registeration = new UserRegistration();
registeration.setUserName("rajkumar@123");
registeration.setPassword("123");
registeration.setEmail("[email protected]");
registeration.setMobileNumber("9776948292");

RegisterDao registerDao = new RegisterDao();


registerDao.saveUser(registeration);*/

/*UserRegistration userRegistration = registerDao.getUserById(1L);


System.out.println(userRegistration);*/
/*UserDto userDto = new UserDto();
userDto.setEmail("[email protected]");
userDto.setMobileNumber("9861443560");
userDto.setPassword("123");
userDto.setUserName("rahul@987");

registerDao.updateUserDetailsById(1L,userDto);*/

/* registerDao.deleteUser(1L);*/

/* RegisterHqlDao registerHqlDao = new RegisterHqlDao();


List<UserRegistration> list = registerHqlDao.getUsers();
list.forEach(user->{
System.out.println(user);
});*/

/*RegisterHqlDao registerHqlDao = new RegisterHqlDao();


UserRegistration userRegistration = registerHqlDao.getUserByEmail("[email protected]");
System.out.println(userRegistration);*/

RegisterHqlDao registerHqlDao = new RegisterHqlDao();


registerHqlDao.updateMobileNumberById("725689124", 1L);

/*RegisterHqlDao registerHqlDao = new RegisterHqlDao();


registerHqlDao.deleteUserById(2L);*/
}
}

Before Update
Run As---1JavaApplication

After Updation
App.java
package com.oehm5.hibernate;

//import java.util.List;

//import com.oehm5.hibernate.dao.RegisterDao;
import com.oehm5.hibernate.dao.RegisterHqlDao;
//import com.oehm5.hibernate.dto.UserDto;
//import com.oehm5.hibernate.entity.UserRegistration;
//import com.oehm5.hibernate.entity.UserRegistration;

public class App


{
public static void main( String[] args )
{
/*UserRegistration registeration = new UserRegistration();
registeration.setUserName("rajkumar@123");
registeration.setPassword("123");
registeration.setEmail("[email protected]");
registeration.setMobileNumber("9776948292");

RegisterDao registerDao = new RegisterDao();


registerDao.saveUser(registeration);*/

/*UserRegistration userRegistration = registerDao.getUserById(1L);


System.out.println(userRegistration);*/
/*UserDto userDto = new UserDto();
userDto.setEmail("[email protected]");
userDto.setMobileNumber("9861443560");
userDto.setPassword("123");
userDto.setUserName("rahul@987");

registerDao.updateUserDetailsById(1L,userDto);*/

/* registerDao.deleteUser(1L);*/

/* RegisterHqlDao registerHqlDao = new RegisterHqlDao();


List<UserRegistration> list = registerHqlDao.getUsers();
list.forEach(user->{
System.out.println(user);
});*/

/*RegisterHqlDao registerHqlDao = new RegisterHqlDao();


UserRegistration userRegistration = registerHqlDao.getUserByEmail("[email protected]");
System.out.println(userRegistration);*/

/*RegisterHqlDao registerHqlDao = new RegisterHqlDao();


registerHqlDao.updateMobileNumberById("725689124", 1L);*/

RegisterHqlDao registerHqlDao = new RegisterHqlDao();


registerHqlDao.deleteUserById(1L);
}
}

Before delete
Run As---1JavaApplication

After Delete

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

m_id name language rating

Now we have to form a relationship


between two Tables in Hibernate:

Ans. Associations

This is Owning Table or


Movie Owning Entity

A_id name age dob m_id

Associated Table or
Associated Entity
Actors
If we want to have relationship in Hibernate we have:

Association:
1. One to One
Together we call: Problem of Relations(Has-a):
2. One to Many
Relationship are define in the form of Association.
3. Many to One
4. Many to Many

1. One to One: Example Team ------> Captain


Mobile----> Battery
Class-------> Monitor
Country----> Capital
FunctionalInterface----> Abstractmethod
Annotation: @OneToOne
@PrimaryKeyJoinColumn-----> this can use only with One-to-One Relationship.
@JoinColumn

[In Entity class and DTO class always write Wrapper class as a data types]

SAXParseException: this error will come in .xml file only.

Create a Maven Project name: hibernate1

View of the Project (hibernate1)


Add dependency in pom.xml file:

<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->


<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.4.0.Final</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.mysql/mysql-connector-j -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.0.32</version>
</dependency>

Association.java

package com.oehm5.hibernate1.dao;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

import com.oehm5.hibernate1.entity.Team;

public class AssosiationDao {

public void saveTeamDetails(Team team) {

Configuration cfg = new Configuration();


cfg.configure();

SessionFactory sessionFactory = cfg.buildSessionFactory();

Session session = sessionFactory.openSession();

Transaction transaction = session.beginTransaction();

session.save(team);
transaction.commit();
}
}
hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>


<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/framework_oehm5</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hbm2ddl.auto">update</property>
<property name="hibernate.show_sql">true</property>

<mapping class="com.oehm5.hibernate1.entity.Team"></mapping>
<mapping class="com.oehm5.hibernate1.entity.Captain"></mapping>
</session-factory>
</hibernate-configuration>
Team.java
package com.oehm5.hibernate1.entity;
import java.io.Serializable;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
//import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.Table;

import org.hibernate.annotations.GenericGenerator;

@Entity
@Table(name="team")
public class Team implements Serializable{
@Id
@GenericGenerator(name="team_auto", strategy = "increment")
@GeneratedValue(generator = "team_auto")
@Column(name="t_id")
private Long tId;

@Column(name="name")
private String name;
Defines the set of cascadable operations that are propagated to the
@Column(name="noOfPlayer")
private Long noOfPlayer; associated entity.

@Column(name="country") The value cascade=ALL is equivalent to cascade={save,


private String country;
update, REMOVE, REFRESH, DETACH} .
@Column(name="type")
private String type;

@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "fr_id") //or @PrimaryKeyJoinColumn(name = “t_id”)
private Captain captain;

public Long gettId() {


return tId;
}
public void settId(Long tId) {
this.tId = tId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Long getNoOfPlayer() {
return noOfPlayer;
}
public void setNoOfPlayer(Long noOfPlayer) {
this.noOfPlayer = noOfPlayer;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public Captain getCaptain() {
return captain;
}
public void setCaptain(Captain captain) {
this.captain = captain;
}
}
Captain.java
package com.oehm5.hibernate1.entity;
import java.io.Serializable;

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

import org.hibernate.annotations.GenericGenerator;

@Entity
@Table(name="captain")
public class Captain implements Serializable{

@Id
@GenericGenerator(name="cap_auto", strategy = "increment")
@GeneratedValue(generator = "cap_auto")
@Column(name="c_id")
private Long cId;

@Column(name="name")
private String name;

@Column(name="jersy_number")
private String jersyNumber;

@Column(name="age")
private Long age;

@Column(name="matches_played")
private Long noMatchesPlayed;

public Long getcId() {


return cId;
}

public void setcId(Long cId) {


this.cId = cId;
}

public String getName() {


return name;
}

public void setName(String name) {


this.name = name;
}

public String getJersyNumber() {


return jersyNumber;
}

public void setJersyNumber(String jersyNumber) {


this.jersyNumber = jersyNumber;
}

public Long getAge() {


return age;
}

public void setAge(Long age) {


this.age = age;
}

public Long getNoMatchesPlayed() {


return noMatchesPlayed;
}

public void setNoMatchesPlayed(Long noMatchesPlayed) {


this.noMatchesPlayed = noMatchesPlayed;
}
}
App.java
package com.oehm5.hibernate1;

import com.oehm5.hibernate1.dao.AssosiationDao;
import com.oehm5.hibernate1.entity.Captain;
import com.oehm5.hibernate1.entity.Team;
public class App
{
public static void main( String[] args )
{
Captain captain = new Captain();
captain.setName("ronaldo");
captain.setAge(35L);
captain.setJersyNumber("7");
captain.setNoMatchesPlayed(200L);

Team team = new Team();


team.setName("portugal football team");
team.setType("football");
team.setCountry("portugal");
team.setNoOfPlayer(11L);
team.setCaptain(captain);

AssosiationDao dao= new AssosiationDao();


dao.saveTeamDetails(team);
}
}

Create a table: team and captain in Database (framework_oehm5)


Run As----1JavaApplication
Team Captain
1. OneToOne

OneToOne : It is a bidirectional relationship

To use OneToOne relationship we use :

 @OneToOne
 @PrimaryKeyJoinColumn-- This annotation is use only in OneToOne Association only.
 @JoinColumn-- this annotation can be used any of the association

2. OneToMany: Whenever we are mapping a class(one) with a collection(multiple) of data

Example: Team ------- Players

Customer ----- Products

Trainer-------- Course

Brand---------Models

Company----- employees

To use OneToMany Association :

 @OneToMany
 @JoinColumn

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Create a Maven Project or Work on existing Project(hibernate1) for OneToMany

View of the Project


Customer.java
package com.oehm5.hibernate1.entity;

import java.io.Serializable;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import org.hibernate.annotations.GenericGenerator;

@Entity
@Table(name = "customer")
public class Customer implements Serializable {
@Id
@GenericGenerator(name="p_auto", strategy = "increment")
@GeneratedValue(generator = "p_auto")
@Column(name="c_id")
private Long cId;

@Column(name="name")
private String name;

@Column(name="contact_number")
private String contactNumber;

@Column(name="address")
private String address;

@Column(name="payment_mode")
private String PaymentMode;

@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "customer_id")
private List<Product> product;

public Long getcId() {


return cId;
}

public void setcId(Long cId) {


this.cId = cId;
}

public String getName() {


return name;
}

public void setName(String name) {


this.name = name;
}

public String getContactNumber() {


return contactNumber;
}

public void setContactNumber(String contactNumber) {


this.contactNumber = contactNumber;
}
public String getAddress() {

return address;
}

public void setAddress(String address) {


this.address = address;
}

public String getPaymentMode() {


return PaymentMode;
}

public void setPaymentMode(String paymentMode) {


PaymentMode = paymentMode;
}

public List<Product> getProduct() {


return product;
}

public void setProduct(List<Product> product) {


this.product = product;
}
}
Product.java
package com.oehm5.hibernate1.entity;

import java.io.Serializable;
import java.util.Date;

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

import org.hibernate.annotations.GenericGenerator;

@Entity
@Table(name="product")
public class Product implements Serializable {
@Id
@GenericGenerator(name="p_auto", strategy = "increment")
@GeneratedValue(generator = "p_auto")
@Column(name="p_id")
private Long pId;

@Column(name="price")
private Double price;

@Column(name="manufacturing_date")
private Date manufacturingDate;

@Column(name="color")
private String color;

@Column(name="quantity")
private Double quantity;

@Column(name = "name")
private String name;

public Long getpId() {


return pId;
}
public void setpId(Long pId) {
this.pId = pId;
}

public Double getPrice() {


return price;
}

public void setPrice(Double price) {


this.price = price;
}

public Date getManufacturingDate() {


return manufacturingDate;
}

public void setManufacturingDate(Date manufacturingDate) {


this.manufacturingDate = manufacturingDate;
}

public String getColor() {


return color;
}

public void setColor(String color) {


this.color = color;
}

public Double getQuantity() {


return quantity;
}

public void setQuantity(Double quantity) {


this.quantity = quantity;
}

public String getName() {


return name;
}

public void setName(String name) {


this.name = name;
}

}
AssosiationDao.java
package com.oehm5.hibernate1.dao;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

import com.oehm5.hibernate1.entity.Customer;
import com.oehm5.hibernate1.entity.Team;

public class AssosiationDao {

public void saveTeamDetails(Team team) {

Configuration cfg = new Configuration();


cfg.configure();

SessionFactory sessionFactory = cfg.buildSessionFactory();

Session session = sessionFactory.openSession();

Transaction transaction = session.beginTransaction();

session.save(team);
transaction.commit();
}

public void saveOrderDetails(Customer customer) {

Configuration cfg = new Configuration();


cfg.configure();

SessionFactory sessionFactory = cfg.buildSessionFactory();

Session session = sessionFactory.openSession();

Transaction transaction = session.beginTransaction();

session.save(customer);
transaction.commit();
}
}
hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/framework_oehm5</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hbm2ddl.auto">update</property>
<property name="hibernate.show_sql">true</property>

<!-- <mapping class="com.oehm5.hibernate1.entity.Team"></mapping> -->


<!-- <mapping class="com.oehm5.hibernate1.entity.Captain"></mapping> -->

<mapping class="com.oehm5.hibernate1.entity.Customer"></mapping>
<mapping class="com.oehm5.hibernate1.entity.Product"></mapping>
</session-factory>
</hibernate-configuration>
App.java
package com.oehm5.hibernate1;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import com.oehm5.hibernate1.dao.AssosiationDao;
//import com.oehm5.hibernate1.entity.Captain;
import com.oehm5.hibernate1.entity.Customer;
import com.oehm5.hibernate1.entity.Product;
//import com.oehm5.hibernate1.entity.Team;
public class App
{
public static void main( String[] args )
{
/*Captain captain = new Captain();
captain.setName("ronaldo");
captain.setAge(35L);
captain.setJersyNumber("7");
captain.setNoMatchesPlayed(200L);

Team team = new Team();


team.setName("portugal football team");
team.setType("football");
team.setCountry("portugal");
team.setNoOfPlayer(11L);
team.setCaptain(captain);

AssosiationDao dao= new AssosiationDao();


dao.saveTeamDetails(team);*/

List<Product> list = new ArrayList<Product>();

Product product = new Product();


product.setName("Laptop");
product.setColor("Black");
product.setPrice(35000D);
product.setManufacturingDate(new Date());
product.setQuantity(1D);

Product product1 = new Product();


product1.setName("Mobile");
product1.setColor("Black");
product1.setPrice(15000D);
product1.setManufacturingDate(new Date());
product1.setQuantity(1D);

list.add(product);
list.add(product1);

Customer customer = new Customer();


customer.setName("Amith");
customer.setContactNumber("8249633792");
customer.setPaymentMode("Cash on Delivery");
customer.setAddress("Marathalli Bangalore-560037");
customer.setProduct(list);

AssosiationDao dao= new AssosiationDao();

dao.saveOrderDetails(customer);
}
}
Create a table name: customer, product in database: framework_oehm5
RunAs------1JavaApplication

Console
customer_id column will automatically will
generate after execution of program

If customer_id is not showing in product table then:

1. Go to product table
2. Click : Table: product
3. Then do the refresh

3. ManyToOne: It is opposite of OneToMany


4. ManyToMany : In ManyToMany we are mapping collection of data to collection of data

Example: Student-------Subject

Products ------Customers

Reader--------Subscription

Book----------Author

To use this ManyToMany Association:

 @ManyToMany
 @JoinTable: this must used in Owning Table.
reader_subscription

r_id s_id

reader subscription

r_id name email s_id type price


Problem of Relations(Has-a relationship):

 @OneToOne
 @OneToMany
 @ManyToOne
 @ManyToMany

Relationship are define through Joins in Database, Hibernate Represent Joins in the form of Associations like OneToOne,
OneToMany, ManyToOne and ManyToMany.

Cascade:

 It is used to configure operation on Associated Entity.


 It is used with problem of relation.

@OneToOne:

It is used to map one class with another class

It is bi-directional

@PrimaryKeyJoinColumn:

 This annotation can be used only for OneToOne relation


 This annotation should be only in Owning entity
 This annotation will map primary Key of the entity

@JoinColumn:

 JoinColumn means foreignekey


 JoinColumn is used to map foreignekey to associated table
 JoinColumn is bi-directional

@OneToMany:

 This annotation is used to map a class with Collection


 This annotation is unidirectional
 This annotation should be used on Owning Entity

@ManyToOne:

 This annotation is used to map a Collection with a class


 This annotation is unidirectional
 It is used in associated entity
 It is same as OneToMany relationship viewed from opposite perspective.

@ManyToMany:

 It is used to map Collection with a Collection; either end of the association can made as owning entity.

@JoinTable:

 It is used to create common table between two entities


Create: Maven project or do it in hibernate1 project for ManyToMany

View of the Project

Add dependency if not added in pom.xml:

<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->


<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.4.0.Final</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.mysql/mysql-connector-j -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.0.32</version>
</dependency>
ReaderEntity.java
package com.oehm5.hibernate1.entity;

import java.io.Serializable;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Table;

import org.hibernate.annotations.GenericGenerator;
@Entity
@Table(name = "reader_details")
public class ReaderEntity implements Serializable{

@Id
@GenericGenerator(name="s_auto", strategy = "increment")
@GeneratedValue(generator = "s_auto")
@Column(name="r_id")
private Long rId;

@Column(name="name")
private String name;

@Column(name="email")
private String email;

@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "reader_subscription",
joinColumns = {@JoinColumn(referencedColumnName = "r_id")},
inverseJoinColumns = {@JoinColumn(referencedColumnName = "s_id")})
private Set<SubscriptionEntity> subscriptions; // or List<SubscriptionEntity> subscription;

public Long getrId() {


return rId;
}

public void setrId(Long rId) {


this.rId = rId;
}

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 Set<SubscriptionEntity> getSubscription() {


return subscriptions;
}

public void setSubscription(Set<SubscriptionEntity> subscription) {


this.subscriptions = subscription;
}
}
SubscriptionEntity.java
package com.oehm5.hibernate1.entity;

import java.io.Serializable;
import java.util.Set;

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

import org.hibernate.annotations.GenericGenerator;
@Entity
@Table(name="subscription")
public class SubscriptionEntity implements Serializable {
@Id
@GenericGenerator(name="s_auto", strategy = "increment")
@GeneratedValue(generator = "s_auto")
@Column(name="s_id")
private Long sId;

@Column(name="subscription_name")
private String subscriptionName;

@ManyToMany(mappedBy = "subscriptions")
private Set<ReaderEntity> reader;

public Long getsId() {


return sId;
}

public void setsId(Long sId) {


this.sId = sId;
}

public String getSubscriptionName() {


return subscriptionName;
}

public void setSubscriptionName(String subscriptionName) {


this.subscriptionName = subscriptionName;
}

public Set<ReaderEntity> getReader() {


return reader;
}

public void setReader(Set<ReaderEntity> reader) {


this.reader = reader;
}
}
AssosiationDao.java
package com.oehm5.hibernate1.dao;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

import com.oehm5.hibernate1.entity.Customer;
import com.oehm5.hibernate1.entity.ReaderEntity;
import com.oehm5.hibernate1.entity.Team;

public class AssosiationDao {

public void saveTeamDetails(Team team) {

Configuration cfg = new Configuration();


cfg.configure();

SessionFactory sessionFactory = cfg.buildSessionFactory();

Session session = sessionFactory.openSession();

Transaction transaction = session.beginTransaction();

session.save(team);
transaction.commit();
}

public void saveOrderDetails(Customer customer) {

Configuration cfg = new Configuration();


cfg.configure();

SessionFactory sessionFactory = cfg.buildSessionFactory();

Session session = sessionFactory.openSession();

Transaction transaction = session.beginTransaction();

session.save(customer);
transaction.commit();
}
public void saveReaderDetails(ReaderEntity readerEntity) {

Configuration cfg = new Configuration();


cfg.configure();

SessionFactory sessionFactory = cfg.buildSessionFactory();

Session session = sessionFactory.openSession();

Transaction transaction = session.beginTransaction();

session.save(readerEntity);
transaction.commit();
}
}
hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/framework_oehm5</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hbm2ddl.auto">update</property>
<property name="hibernate.show_sql">true</property>

<!-- <mapping class="com.oehm5.hibernate1.entity.Team"></mapping> -->


<!-- <mapping class="com.oehm5.hibernate1.entity.Captain"></mapping> -->
<!-- <mapping class="com.oehm5.hibernate1.entity.Customer"></mapping> -->
<!-- <mapping class="com.oehm5.hibernate1.entity.Product"></mapping> -->
<mapping class="com.oehm5.hibernate1.entity.ReaderEntity"></mapping>
<mapping class="com.oehm5.hibernate1.entity.SubscriptionEntity"></mapping>
</session-factory>
</hibernate-configuration>

App.java

package com.oehm5.hibernate1;

//import java.util.ArrayList;
//import java.util.Date;
import java.util.HashSet;
//import java.util.List;
import java.util.Set;

import com.oehm5.hibernate1.dao.AssosiationDao;
//import com.oehm5.hibernate1.entity.Captain;
//import com.oehm5.hibernate1.entity.Customer;
//import com.oehm5.hibernate1.entity.Product;
import com.oehm5.hibernate1.entity.ReaderEntity;
import com.oehm5.hibernate1.entity.SubscriptionEntity;
//import com.oehm5.hibernate1.entity.Team;
public class App
{
public static void main( String[] args )
{

SubscriptionEntity subOne = new SubscriptionEntity();


subOne.setSubscriptionName("sports");

SubscriptionEntity subTwo = new SubscriptionEntity();


subTwo.setSubscriptionName("movie");

Set<SubscriptionEntity> subSet = new HashSet<SubscriptionEntity>();


subSet.add(subOne);
subSet.add(subTwo);

ReaderEntity readerOne = new ReaderEntity();


readerOne.setName("lakshmi");
readerOne.setEmail("[email protected]");
readerOne.setSubscription(subSet);

ReaderEntity readerTwo = new ReaderEntity();


readerTwo.setName("lucky");
readerTwo.setEmail("[email protected]");
readerTwo.setSubscription(subSet);

Set<ReaderEntity> readerSet = new HashSet<ReaderEntity>();


readerSet.add(readerOne);
readerSet.add(readerTwo);

AssosiationDao dao= new AssosiationDao();


dao.saveReaderDetails(readerOne);
dao.saveReaderDetails(readerTwo);
}
}
Create Table in Database(framework_oehm5): reader_details, subscription, reader_subscription
Right Click ---- RunAs ----1JavaApplication

You might also like