session对象

解决HibernateException: Illegal attempt to associate a collection with two open sessions

Deadly 提交于 2019-12-09 10:54:27
在项目中遇到这个 HibernateException: Illegal attempt to associate a collection with two open sessions. 一查代码发现是因为在service中存在两个不同的hibernate session都同时引用了同一个collection对象,一个是load(),一个是saveOrUpdate().由于项目是以前的项目,所以代码很不规范,也很“庞大”(一个方法超过1000行),不想太伤筋动骨的修改。 于是找到了一个简单的修改方法: hibernate session 的 merge() 方法。hibernate3.0以上可以使用merge()来合并两个session中的同一对。 将原来的代码: hbSession.saveOrUpdate(closureTask); 改作: hbSession.saveOrUpdate(hbSession.merge(closureTask)); 搞定!! 来源: oschina 链接: https://my.oschina.net/u/3914/blog/68

基于注解的Controller

心不动则不痛 提交于 2019-12-09 01:30:37
基于注解的Controller 2010年07月20日 星期二 15:12 转载:spring 2.5 annotation 方式实现mvc 一个简单的基于注解的 Controller 使用过低版本 Spring MVC 的读者都知道:当创建一个 Controller 时,我们需要直接或间接地实现 org.springframework.web.servlet.mvc.Controller 接口。一般情况下,我们是通过继承 SimpleFormController 或 MultiActionController 来定义自己的 Controller 的。在定义 Controller 后,一个重要的事件是在 Spring MVC 的配置文件中通过 HandlerMapping 定义请求和控制器的映射关系,以便将两者关联起来。 来看一下基于注解的 Controller 是如何定义做到这一点的,下面是使用注解的 BbtForumController: 清单 1. BbtForumController.java package com.baobaotao.web; import com.baobaotao.service.BbtForumService; import org.springframework.beans.factory.annotation.Autowired; import

Spring常用注解说明

让人想犯罪 __ 提交于 2019-12-09 01:13:12
注意: 在使用注解之前需要在Spring配置文件中配置以下内容开启注解扫描。 <context:component-scan base-package="cn.test"/> @Service用于标注业务层组件。 @Controller用于标注控制层组件(如struts中的action)。 @Repository用于标注数据访问组件,即DAO组件。 @Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。 @Autowired 默认按类型装配,如果我们想使用按名称装配,可以结合@Qualifier注解一起使用。如下: @Autowired和 @Qualifier("personDaoBean") 存在多个实例时配合使用。 @Resource默认按名称装配,当找不到与名称匹配的bean才会按类型装配。 @Required注解适用于bean属性的setter方法并且它指示,受影响的bean属性必须在配置时被填充在XML配置文件中,否则容器将抛出BeanInitializationException 例外。 实现依赖注入时执行顺序的概括: @Autowired 1. 匹配类型 2. 根据Qualifiers注解设置的名称 3. 根据名称 @Resource 1. 根据名称 2. 根据类型 3. Qualifiers无效

hibernate之HQL

回眸只為那壹抹淺笑 提交于 2019-12-08 14:18:27
1.什么是HQL? HQL是Hibernate Query Language(Hibernate 查询语言)的缩写,提供更加丰富灵活、更为强大的查询能力;HQL更接近SQL语句查询语法。Hibernate 查询语言(HQL)是一种面向对象的查询语言,类似于 SQL,但不是去对表和列进行操作,而是面向对象和它们的属性。 HQL 查询被 Hibernate 翻译为传统的 SQL 查询从而对数据库进行操作。 2.HQL查询的步骤 执行HQL查询的步骤: 1、获得HibernateSession对象 2、编写HQL语句 3、调用Session的createQuery方法创建查询对象 4、如果HQL语句包含参数,则调用Query的setXxx方法为参数赋值 5、调用Query对象的list等方法返回查询结果。 3.hibernate查询操作 Query 接口让你方便地对数据库及持久对象进行查询,它可以有两种表达方式: HQL 语言或本地数据库的 SQL 语句。 Query 经常被用来绑定查询参数、限制查询记录数量,并最终执行查询操作。 通过 Query 主要完成查询操作 . 我们通过 Query 可以执行 hql 语句 . Query query=Session.createQuery(hql); 下面这个可以执行 sql 语句 SQLQuery sqlQuery=Session

Hibernate使用笔记整理

非 Y 不嫁゛ 提交于 2019-12-08 05:28:43
A. Hibernate执行环境配置 用到的包 antlr-2.7.6.jar 解释hibernate的查询语言,叫hibernate query Language,叫hql语句的 commons-collections-3.1.jar 是一些集合,一些公共的集合,apache 的 公共包, 主要是支持hibernate缓存的,hibernate有各种缓存,一级缓存,二级缓存,查询缓存 dom4j-1.6.1.jar 解析xml文件的 hibernate3.jar 核心包 javassist-3.11.0.GA.jar 生成一些动态代理的包 jta-1.1.jar java事物管理,事物分布式管理 log4j-1.2.17.jar slf4j-api-1.5.8.jar jpos的日志接口,jpos是自己的产品,一般用的并不多,用的几乎都是log4j,为什么hibernate用它?可能是gemkey被jpos收编了之后,换本家了总得用点自己的东西,3.5以下需要 slf4j-log4j12-1.5.8.jar slf4j-api的实现类,没有实现完的 类路径下的log4j.properties log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out

Javaweb笔记整理

廉价感情. 提交于 2019-12-08 02:43:28
分页 MySQL 使用: limit 起始条数,显示多少条 Oracle使用: SELECT * FROM( SELECT e.*,ROWNUM rn FROM emp e WHERE ROWNUM <=20 )WHERE rn>10; -- 第10条开始,取10条 分页的对象封装 public class Page<T> { private List<T> datas = new ArrayList<T>();// 数据 private int size;// 显示条数:10 private int dataCount;// 总120条 private int pre;// 上一页 private int now;// 第3页: private int count;// 共5页/尾页 private int next;// 下一页 private int start;// 显示页码开始 private int end;// 显示页码结束 private String url;// 路径 // 共130条/第3页/共5页 // 第一页 上一页 [1][2]3[4][5] 下一页 尾页 /** * @param size */ public Page(int size, int dataCount, int nowPage) { // 根据数据总条数来计算总页数:count

在web中实现邮件发送功能

限于喜欢 提交于 2019-12-08 00:53:54
在web站点中也可以集成邮件客户端软件的功能,以便web站点的注册用户可以通过web页面来收发电子邮件,例如,sina和sohu等大型门户网站都会为会员提供了通过web页面来收发电子邮件的功能。对于一些中小型的web站点来说,虽然不需要为其会员提供web页面的电子邮件收发功能,但是,这些站点确很可能需要为自己提供向注册用户发送邮件的功能,例如,web站点自动给新注册的用户发送一封包含其注册信息的欢迎Email,给过生日的注册会员自动发送一封表示祝贺的Email,将网站的最新活动信息通过Email发送给所有的注册会员等。本节主要讲解如何实现在中小型的WEB站点中实现邮件发送功能,要在web站点中实现邮件发送功能的工作其实也很简单,只要将普通的邮件发送程序改写成一个web应用程序就可以了,只是web站点中的邮件发送程序通常会使用自己站点的SMTP服务器来对外发送邮件,web站点发送邮件的过程如下图所示: 从上图可以看出,浏览器通过访问web站点中的邮件发送程序来提交邮件发送请求,邮件发送程序将把邮件发送给自己网站的SMTP服务器,该SMTP服务器收到邮件后,将根据收件人的地址在将邮件的目的地,要么是投递到本地域管理的收件人邮箱中,要么是转交给管理收件人地址域的其他SMTP服务器。 一些web服务器程序专门提供了对邮件发送功能的一些支持,例如

JavaWeb: Redis存储Session方案

瘦欲@ 提交于 2019-12-07 21:32:42
所有支持Servlet规范的容器都自带session管理,于是大多数人都使用 HttpSession 接口存放状态信息。事实上, servlet的session会使得应用服务器水平扩展变的非常困难。 使用Servlet Session时的妥协方案 Session Replication 这无疑是一种浪费内存的方法,对于5台左右的集群还可以忍受,如果你需要几十甚至上百台集群,这就完全不可行。 Session Sticky 该方案虽然可以避免上面的问题,但是这完全背离了负载均衡的初衷。假如有A, B服务器,A处理session为1 ~ 5的请求,B处理session为6 ~ 10的请求,如果某个时间段内,有1 ~ 5 session的用户访问需求非常高,而6 ~ 10 session的用户不怎么访问,这样就会导致A服务器负载过高而B却十分清闲,此时负载均衡就失去了意义。 使用Redis进行Session存储 在应用编写时应该完全弃用 HttpSession 接口,而是将需要保存的状态信息放到Redis中。 生成session id 当用户登陆时,服务器生成一个全局唯一的字符串 SESSION:日期:20位随机字符串 做为redis中hash数据结构的key名,然后将该标识做为cookie返回给客户端。 之后该用户的后续请求都会带上此cookie, 我们编写一个filter,

spring事务管理错误createSQLQuery is not valid without active transaction

六眼飞鱼酱① 提交于 2019-12-07 10:53:35
网上扒的,很管用,自己就借此发一下,方便以后看。。。。。。。 原文网址 http://blog.csdn.net/yinjian520/article/details/8666695 很多时候我们使用hibernate的session时,都是让session在某一运行环境中保持其唯一。例如在同一线程内用同一个session,在同一方法内用同一session,这样我们就可以用session里面缓存好的数据。但,我想说的不是缓存,且听我一一道来。 最近试用spring3.0.2+struts2.18+hibernate3.3.2学习搭建一个web项目,出现了一个相当郁闷的问题。就是我明明配置好了spring管理hibernate事务了, 当我在dao中执行hibernate的方法时,如save,delete,update,createQuery,总是说不能在没有活动的事务中执行(org.hibernate.HibernateException: createSQLQuery is not valid without active transaction)。 立马上google查,一无所获。曾几度怀疑是否配置写出了,dao或service写错了,改来改去的依旧存在问题。当时相当郁闷啊,想啊,你spring不是帮我管理事务么?你不自动开启事务啊,还要我手动开启啊。立马查spring文档

什么是单点登录SSO?

≯℡__Kan透↙ 提交于 2019-12-07 05:03:38
什么是单点登录SSO? 今天介绍下什么是单点登录,这个曾经的使用场景是国网电力的PMS2.0系统中,为了仅一次登录就可以同时访问多个系统,采用单点登录的模式。 单点登录在现在的系统架构中广泛存在,他将多个子系统的认证体系打通,实现了一个入口多处使用,而在架构单点登录时,也会遇到一些小问题,在不同的应用环境中可以采用不同的单点登录实现方案来满足需求。我将以我所遇到的应用环境以及在其中所经历的各个阶段与大家分享,若有不足,希望各位不吝赐教。 一、共享Session 共享Session可谓是实现单点登录最直接、最简单的方式。将用户认证信息保存于Session中,即以Session内存储的值为用户凭证,这在单个站点内使用是很正常也很容易实现的,而在用户验证、用户信息管理与业务应用分离的场景下即会遇到单点登录的问题,在应用体系简单,子系统很少的情况下,可以考虑采用Session共享的方法来处理这个问题。 这个架构我使用了基于Redis的Session共享方案。将Session存储于Redis上,然后将整个系统的全局Cookie Domain设置于顶级域名上,这样SessionID就能在各个子系统间共享。 这个方案存在着严重的扩展性问题,首先,ASP.NET的Session存储必须为SessionStateItemCollection对象,而存储的结构是经过序列化后经过加密存储的