当缓存中的实体发生改变,并不会立即执行相关的sql语句。这使得session能够把几条sql语句合并成一条sql语句。如:
tx = session.beginTransaction();
Customer customer = (Customer)session.load(Customer.class,new Long(1));
customer.setName("李义星");
customer.setAge(22);
tx.commit();
当提交事务的时候,清理缓存,并组合成了一条sql语句。
默认情况下,session通过已经顺序执行:
1.按照应用程序调用save方法的先后顺序,执行对实体进行的插入语句。
2.执行所有对实体进行的更新语句。
3.执行对集合进行的delete语句。
4.执行对集合元素进行的delete语句。
5.执行对集合进行插入的inster语句。
6.按照应用程序调用delete方法的先后顺序执行对实体进行删除的delete语句。
默认情况下,session会在
1.事务提交的时候,先清理缓存,再提交事务。
2.调用find或者iterate方法时,如果缓存中的持久化对象属性发生变化,就会先清理缓存。
3.当调用flush方法
另外如果对象使用的是native生成器策略生成OID,那么当调用session的save保存对象时,会立即执行插入语句。其他策略的时候,session的save方法不会立即执行sql语句,只有在session清理缓存的时候才会执行sql语句。如果save执行再次修改这个实体的属性,会照成对这个实体执行一次update,因此不建议save之后再修改,而是修改好执行再save。
session对一个已经持久化的对象执行两次save,第二次是多余的。如
Customer c = new Customer();
session.save(c);
customer.setName("tom");
session.save(c);//多余的,因为无需这么做,session会自动完成更新。
一个新的session对一个游离状态的对象执行save,会照成两条相同数据
Customer c = new Customer();
customer.setName("tom");
session.save(c);
session.close();
session2.save(customer);//此时多了一条相同数据,只是id不同。
update方法
Cu c =new Cu();
//设置c属性略
session1.save(c);
session1.close();//c处于游离状态
c.setName("name2");
session2.update(c);
customer.setName("name3");
session2.close();
实际上做的事是
1.调用session2的update方法,只是把c加入到缓存,并不执行sql。
2.session2.close()才会生成最后的sql语句,并完成更新。
分享到:
相关推荐
4. **及时清理Session**:为了避免内存泄漏,开发者应合理设计Session数据的大小和类型,避免存储大量数据或大数据对象。同时,可以设置合适的空闲检测策略,主动清除长时间未使用的Session。 总之,正确理解和设置...
这样一旦用户超过30分钟未进行任何操作(比如点击页面、提交表单等),其Session就会自动失效,从而强制用户重新登录验证身份。这种方式既保证了安全性又避免了频繁要求用户登录带来的不便。 #### Session失效的...
2. **session清理**:在用户完成购物或退出会话时,需要清除session中的购物车信息,以释放服务器资源。 3. **购物车操作**:包括添加商品、删除商品、修改数量等,这些都需要更新session中的购物车对象,并在必要时...
- **轻量化**: Session 实例非常轻量,其创建和销毁的成本较低。在设计系统时,可以考虑为每个请求分配一个 Session 实例,并在请求结束后及时关闭该 Session。 - **缓存机制**: Session 内部维护了一个缓存,用于...
**Session购物车详解** 在Web开发中,购物车功能是一个非常关键的部分,它允许用户选择商品并临时存储,以便在结账时一次性...理解并掌握Session购物车的实现原理和优化策略,对于开发高质量的电子商务平台至关重要。
另外,对于表单提交,有时会用隐藏字段来传递Session ID,但这增加了URL长度和可能的安全风险。 总结,Session是Web开发中不可或缺的一部分,正确理解和使用Session可以提高用户体验,但也需要注意其潜在的性能和...
本话题将深入探讨如何通过集成Nginx和Tomcat实现负载均衡,并探讨Session共享的策略,以及使用ANT工具进行自动化构建的流程。让我们逐一解析这些关键知识点。 首先,Nginx是一个高性能的反向代理服务器和HTTP缓存,...
### JAVA通过Session和Cookie实现网站自动登录 在现代Web应用开发中,用户认证与授权是极为重要的环节之一。为了提供良好的用户体验,很多网站都提供了自动登录功能,即用户首次登录后,在一定时间内再次访问该网站...
此时,适时的手动清理(如使用`Session.Clear()`或`Session.Abandon()`)就显得尤为重要,但需要注意的是,这些方法仅能清除Session中的数据,对于已分配给Session的内存,操作系统将根据其垃圾回收策略决定何时释放...
这可能涉及设置Session过期时间、定期清理无活动的Session等策略。 2. 安全性:Session ID应尽可能随机且难以预测,防止被攻击者猜解。同时,需要对敏感信息进行加密处理,避免泄露。 3. 跨域问题:如果Web应用存在...
4. **踢出用户操作**:当检测到Session超时时,源码会执行清理操作,如删除服务器上的Session数据,清空用户Cookie中的Session ID,并重定向用户到登录页面。 5. **提示信息**:为了提供良好的用户体验,系统应告知...
3. **可配置性**:开发人员可以自定义SessionId的生成策略、存储方式和超时时间。 **使用SessionId的注意事项:** 1. **不要在URL中暴露SessionId**:这可能导致Session劫持,攻击者可以通过获取到其他用户的...
- EJB2的生命周期方法包括ejbCreate(), ejbActivate(), ejbPassivate(), ejbLoad(), ejbStore(), ejbRemove()等,它们在bean的不同阶段被容器调用,用于初始化、持久化状态和清理资源。 6. **部署描述符** - 部署...
在PHP中,有两种常见的用户验证方法:session和cookie。这两种方法各有优缺点,选择哪种通常取决于应用...在处理用户认证时,务必确保数据加密、防止SQL注入,并定期清理过期的session或cookie,以维护系统的安全性。
5. **清理Token**:成功处理后,从Session中移除Token。 通过这样的方式,我们可以在Struts2框架下有效地防止表单重复提交。同时,还可以结合其他策略,如使用AJAX异步提交,进一步增强用户体验。总的来说,防止...
4. **清理token**:处理完请求后,服务器应该清理或标记token为已使用,防止恶意用户利用已知的token进行重复提交。 结合以上方法,"防止页面重复提交demo"旨在提供一个完整的解决方案,既考虑了前端用户体验,又...
Struts Token机制是一种防止表单重复提交的有效策略,尤其在处理关键操作时,如金融交易或数据修改,防止用户意外或恶意多次点击提交按钮导致的数据重复性问题。下面将详细介绍Struts Token的工作原理、实现方式及其...
【SqlServer中如何解决session阻塞问题】 在数据库管理中,SQL Server中的session阻塞是一个常见的问题,特别是对于...同时,定期进行性能调优和监控,以及对应用程序的适当设计,都能预防和减少session阻塞的发生。
一种更安全的策略是使用加密技术来生成和验证验证码。下面我们将讨论如何实现这一方法: 1. **生成验证码**:首先,我们需要生成一个随机字符串作为验证码。这个字符串可以包含字母和数字,长度通常为4-6个字符。...
在Struts配置文件中,为需要防止重复提交的Action添加一个拦截器引用,如`token`或`token-session`。这两个拦截器都可以处理Token,但`token-session`更安全,因为它会将Token存储在会话中,而不仅仅是请求中。 2....