如果可能的话,我想了解Hibernate SessionFactory类的上述两种方法的概念区别,并带有简单的示例。
前者开启一个常规(stateful)会话,而后者(可能不出所料地)开启一个无状态(stateless)会话。
根据Javadoc的说明,无状态会话是:
针对数据库执行批量操作的命令导向 API。
无状态会话没有实现一级缓存,也不与任何二级缓存交互,也没有实现事务写入后自动检查和自动脏检查,操作也不会级联到关联实例。无状态会话忽略集合。通过无状态会话执行的操作绕过了Hibernate的事件模型和拦截器。由于缺乏一级缓存,因此无状态会话容易受到数据别名效应的影响。
对于某些类型的事务,无状态会话可能比有状态会话稍微快一点。