Hibernate中的Session和Transaction有什么作用?代码举例讲解

在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();