You can try relating hibernate with JDBC and you will be getting some hints about transaction.
In JDBC you need to just open a connection start your work, and in the end you can commit or rollback.
But what if you have many different parallel tasks , which may be dependent or independent to each other. Then you may require commit/rollback each task separately or rollback if any fails.
for example
Big Task :
small task1
small task2
small task3 and many more
rollback the big task if any small task fails.This can be one of the many business requirements.
In JDBC, Connection interface has provided commit() and rollback() methods.
In jpa/hibernate, Transaction interface has provided commit() and rollback() methods.
So one session can have many dependent or independent transactions.
Below is documentation from org.hibernate.Transaction
Allows the application to define units of work, while maintaining
abstraction from the underlying transaction implementation (eg. JTA, JDBC).
A transaction is associated with a Session and is usually
initiated by a call to org.hibernate.Session.beginTransaction().
A single session might span multiple transactions since the notion of a session
(a conversation between the application and the datastore) is of coarser granularity
than the notion of a transaction. However, it is intended that there be at most
one uncommitted transaction associated with a particular Session at any time.
This also might help you
What is the difference between a session and a transaction in JPA 2.0?