Hibernate Session یه پوشاننده (wrapper) هست برای Connection.
چون با این روش دیگه کاربر از نوشتن خیلی کدهای مربوط به ذخیره سازی Entity خلاص میشه.
Connection ها در مخزن قرار داشته و هنگامی که شما متد SessionFactory.openSession رو فراخوانی می کنید, ابتدا Hibernate یه Connection از مخزن میگره و یه Session اطرافش ایجاد میکنه و اونو تحویل میده.
در مورد تراکنش باید گفت تراکنش تو لایه های مختلف انجام میشه. یعنی در پایگاه داده, لایه business , ... اگه فقط یه select ساده است تراکنش خود پایگاه داده کافیه.