Signup/Sign In

Spring Hibernate Configuration

Hibernate is an ORM based framework that is used to map Java objects to a relational database in Java application. It mainly used to store data in a database. Hibernate is primarily designed to manage databases by using Java code. It maps Java classes to database tables and Java types to database types. It is designed and developed by Red Hat and initially released on 23 May 2001.

We can understand by seeing the following image that shows how the hibernate framework maps java class fields to table columns and their types.

In this tutorial, we will see to configure the hibernate in the spring web application. We can configure hibernate either by using an XML file or Java annotations. The XML approach is older and annotation is a new and modern approach. So we will use annotations to configure the hibernate however you are free to use any approach.

hibernate uses SessionFactory class to handle data tables and provides methods to read, save, and fetch data.

Hibernate Configuration using Java Annotations and Code

This file shows a basic hibernate configuration using Java annotations and code in the Spring application.

package com.studytonight;

import org.apache.tomcat.dbcp.dbcp2.BasicDataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.orm.hibernate5.HibernateTransactionManager;
import org.springframework.orm.hibernate5.LocalSessionFactoryBean;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import java.util.Properties;
import javax.sql.DataSource;


@Configuration
@EnableTransactionManagement
@ComponentScan("com.studytonight") 
public class HibernateConf {

	@Bean
	public LocalSessionFactoryBean sessionFactory() {
		LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
		sessionFactory.setDataSource(dataSource());
		sessionFactory.setPackagesToScan("com.studytonight.models");
		sessionFactory.setHibernateProperties(hibernateProperties());
		return sessionFactory;
	}

	@Bean
	public DataSource dataSource() {
		BasicDataSource dataSource = new BasicDataSource();
		dataSource.setDriverClassName("com.mysql.jdbc.Driver");
		dataSource.setUrl("jdbc:mysql://localhost:3306/springwithdb?useSSL=false");
		dataSource.setUsername("user-name");
		dataSource.setPassword("password");
		return dataSource;
	}

	@Bean
	public PlatformTransactionManager hibernateTransactionManager() {
		HibernateTransactionManager transactionManager
		= new HibernateTransactionManager();
		transactionManager.setSessionFactory(sessionFactory().getObject());
		return transactionManager;
	}

	private final Properties hibernateProperties() {
		Properties hibernateProperties = new Properties();
		hibernateProperties.setProperty("hibernate.show_sql","true");
		return hibernateProperties;
	}
}

Hibernate Configuration using XML Tags

If you want to use an XML file then use this XML code to configure hibernate with Spring application.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="...">
 
    <bean id="sessionFactory" 
      class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
        <property name="dataSource" 
          ref="dataSource"/>
        <property name="packagesToScan" 
          value="com.studytonight.models"/>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.hbm2ddl.auto">
                    create-drop
                </prop>
                <prop key="hibernate.dialect">
                    org.hibernate.dialect.MySQL5Dialect
                </prop>
            </props>
        </property>
    </bean>
 
    <bean id="dataSource" 
      class="org.apache.tomcat.dbcp.dbcp2.BasicDataSource">
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/db_name?useSSL=false"/>
        <property name="username" value="db_user"/>
        <property name="password" value="db_password"/>
    </bean>
 
    <bean id="txManager" 
      class="org.springframework.orm.hibernate5.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>
</beans>

After configuration, now we can use it anywhere in the application by adding the following line. We mostly use it with the DAO implementation class.

@Autowired
private SessionFactory sessionFactory;

The session factory is a component of Hibernate that is used to create session objects for the application. However SessionFactory is an interface that provides several methods to deal with sessions.

DataBase Dialects

The following are the dialects of the various databases such as Mysql, Oracle, etc.

DataBase Dialect Name
Microsoft SQL Server 2008 org.hibernate.dialect.SQLServer2008Dialect
MySQL org.hibernate.dialect.MySQLDialect
Oracle org.hibernate.dialect.OracleDialect
PostgreSQL org.hibernate.dialect.PostgreSQLDialect
DB2 org.hibernate.dialect.DB2Dialect

In our next topic, we will learn to use hibernate to connect and save data into the Mysql database.



About the author:
I am a Java developer by profession and Java content creator by passion. I have over 5 years of experience in Java development and content writing. I like writing about Java, related frameworks, Spring, Springboot, etc.