To handle database connections in a Hibernate standalone application, you need to set up Hibernate configuration carefully and ensure the correct management of the Hibernate SessionFactory
and Session
objects. Below are the general steps to achieve this:
Steps to Handle Database Connections in Hibernate Standalone Application
1. Add Required Hibernate Dependencies
Ensure you include the necessary Hibernate and database driver dependencies in your project. For a Maven-based project, here’s an example pom.xml
:
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>6.4.4.Final</version>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>2.2.224</version>
</dependency>
</dependencies>
Substitute the version and database driver according to your requirements.
2. Configure Hibernate
You can configure Hibernate using either a hibernate.cfg.xml
file or a Properties
object in Java code.
a) Using hibernate.cfg.xml
:
Create a file named hibernate.cfg.xml
in the src/main/resources
directory:
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- Database connection settings -->
<property name="hibernate.connection.driver_class">org.h2.Driver</property>
<property name="hibernate.connection.url">jdbc:h2:mem:testdb</property>
<property name="hibernate.connection.username">sa</property>
<property name="hibernate.connection.password"></property>
<property name="hibernate.dialect">org.hibernate.dialect.H2Dialect</property>
<!-- Hibernate settings -->
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- Mappings -->
<mapping class="com.example.entity.YourEntityClass"/>
</session-factory>
</hibernate-configuration>
Replace com.example.entity.YourEntityClass
with the fully qualified class name of your entity.
3. Create Hibernate Utility Class
Create a utility class to manage the SessionFactory
and provide a method to retrieve Session
objects.
package org.kodejava.hibernate;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
private static final SessionFactory sessionFactory;
static {
try {
// Create the SessionFactory from hibernate.cfg.xml
sessionFactory = new Configuration().configure().buildSessionFactory();
} catch (Throwable ex) {
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
public static void shutdown() {
getSessionFactory().close();
}
}
4. Handle Session
in Your Code
Use the Hibernate Session
object for interacting with the database. Always open and close sessions properly.
package org.kodejava.hibernate;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
public class MainApp {
public static void main(String[] args) {
// Get SessionFactory
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
// Open session and start transaction
try (Session session = sessionFactory.openSession()) {
Transaction transaction = session.beginTransaction();
// Perform database operations
MyEntity entity = new MyEntity();
entity.setName("Example Name");
session.save(entity);
transaction.commit(); // Commit transaction
} catch (Exception e) {
e.printStackTrace();
} finally {
HibernateUtil.shutdown(); // Close SessionFactory
}
}
}
5. Sample Entity Class:
Create an annotated entity class to map to a database table.
package org.kodejava.hibernate;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
@Entity
public class MyEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
// Getters and setters
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
6. Points to Remember:
- Always manage the lifecycle of Hibernate
Session
objects properly to avoid memory leaks. - Use
try-with-resources
forSession
to ensure it’s closed properly. - Ensure the
SessionFactory
is created only once and closed when the application ends. - Use appropriate logging and exception handling for error scenarios.
- Configure database credentials securely to avoid exposing sensitive information.
With this setup, you can handle database connections in a Hibernate standalone application effectively.