在Hibernate中,Session和Transaction用于管理数据库连接和事务:
Session:
- 代表一个数据库连接,用于执行增删改查等操作。
- 生命周期由Hibernate管理,来自Hibernate的连接池。
- 非线程安全,同一Session不能被多个线程共享。
- 通过SessionFactory的openSession()方法获取Session。
例如:
Session session = factory.openSession();
Transaction tx = session.beginTransaction();
Customer customer = new Customer();
customer.setName("John");
session.save(customer);
tx.commit();
session.close();
Transaction:
- 代表一个数据库事务,用于维护一组数据库操作的完整性。
- 通过Session的beginTransaction()开始一个事务。
- 在操作完成后调用commit()提交事务,或rollback()回滚事务。
- 如果未开始事务,Hibernate会自动执行隐藏的事务,但不推荐这种做法。
例如:
Session session = factory.openSession();
Transaction tx = session.beginTransaction();
Customer customer = new Customer();
customer.setName("John");
session.save(customer);
tx.rollback(); // 回滚事务,customer不会被插入
tx.commit(); // 提交事务,customer被插入
session.close();