✅ What happens if you don’t close a Hibernate session?
Answer:
If you don’t close a Session
, several serious problems can occur:
🔹 1) Database connection leaks
✅ Each Hibernate Session
holds a JDBC connection (from your connection pool, e.g., HikariCP).
✅ If you forget to close the session, the connection is never returned to the pool → over time, you’ll exhaust all available connections.
✅ Result: new sessions fail with Timeout waiting for connection
or Connection refused
errors..
🔹 2) Memory leaks
✅ Hibernate keeps a first-level cache (session cache) storing all persistent entities you loaded, saved, or updated.
✅ If the session stays open, this cache keeps growing → unused objects stay in memory → application consumes more and more RAM → potential OutOfMemoryError.
🔹 3) Locks and transactions left open
✅ An open session might leave uncommitted transactions or database locks hanging → can cause data corruption, deadlocks, or blocking of other database clients.
🔹 4) Data consistency issues
✅ If the session is not closed properly, changes might not be flushed or committed → entities modified in-memory may never persist to the database → data loss.
🔹 Example of forgetting to close:
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
User user = session.get(User.class, 1L);
user.setUsername("new_name");
tx.commit();
// session.close() missing! ← connection and memory leak risk
🔹 In modern Spring Boot apps:
✅ You don’t manage session closure manually when using @Transactional
→ Spring handles opening, flushing, committing/rolling back, and closing the session for you automatically.
✅ Key takeaway:
Failing to close a Hibernate session causes connection leaks, memory leaks, data consistency problems, and potential app crashes → always close the session when done, or use frameworks like Spring to handle it automatically.