企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# 13.3\. StatelessSession (无状态session)接口 作为选择,Hibernate提供了基于命令的API,可以用detached object的形式把数据以流的方法加入到数据库,或从数据库输出。`StatelessSession`没有持久化上下文,也不提供多少高层的生命周期语义。特别是,无状态session不实现第一级cache,也不和第二级缓存,或者查询缓存交互。它不实现事务化写,也不实现脏数据检查。用stateless session进行的操作甚至不级联到关联实例。stateless session忽略集合类(Collections)。通过stateless session进行的操作不触发Hibernate的事件模型和拦截器。无状态session对数据的混淆现象免疫,因为它没有第一级缓存。无状态session是低层的抽象,和低层JDBC相当接近。 ``` StatelessSession session = sessionFactory.openStatelessSession(); Transaction tx = session.beginTransaction(); ScrollableResults customers = session.getNamedQuery("GetCustomers") .scroll(ScrollMode.FORWARD_ONLY); while ( customers.next() ) { Customer customer = (Customer) customers.get(0); customer.updateStuff(...); session.update(customer); } tx.commit(); session.close(); ``` 注意在上面的例子中,查询返回的`Customer`实例立即被脱管(detach)。它们与任何持久化上下文都没有关系。 `StatelessSession` 接口定义的`insert(), update()` 和 `delete()`操作是直接的数据库行级别操作,其结果是立刻执行一条`INSERT, UPDATE` 或 `DELETE` 语句。因此,它们的语义和`Session` 接口定义的`save(), saveOrUpdate()` 和`delete()` 操作有很大的不同。