最近在项目中出现了一些奇怪问题,还是说说我的目的吧,我想要在数据库中随机抽取一定数量且符合要求的记录,第一种实现,dao的一个方法为:
public List<Calking> find3type(String str2) {
// TODO Auto-generated method stub
List<Calking> list = new ArrayList<Calking>();//用来存放最终的结果集
List<Calking> list1 = null;//用来存储中间查到的所有符合条件的结果
List<Integer> list2;//用来存放生成的随机数数组
Query q=this.getHibernateTemplate().getSessionFactory().openSession().createQuery("from Calking as ca where ca.degree=?");
q.setString(0, str2);
list1=q.list();
int n=list1.size();//用来得到符合条件的结果的个数
Suiji s5=(Suiji) new Suiji5();
list2=s5.take(n);
Iterator<Integer> iterator=list2.iterator();
while(iterator.hasNext()){
int j=(Integer)iterator.next();
Calking cal=(Calking)list1.get(j-1);
list.add(cal);
}
return list;
}
这样我在service里调用dao,在action中就可以得到值了,这种实现已经ok了,可是这样对于系统的消耗太大,用数组存取对象,然后再用数组去过滤对象。第二种实现方式如下,不再是使用数组存取所有对象来选取,而是用数组
存取所有符合条件的对象的id,然后按照id来加载对象。
List<Calking> list = new ArrayList<Calking>();//用来存放加载的对象
List<Integer> list1 = new ArrayList<Integer>();//用来存放最终用来加载对象而生成的id
List<Integer> list2;//用来存放生成的随机数
List<Integer> list3;//用来存放查出来的所有id
//Query q1=this.getHibernateTemplate().find("select ca.id from Calking as ca where ca.degree="+str);
//q1.setString(0, );
//list3=q1.list();
list3=this.getHibernateTemplate().find("select ca.id from Calking as ca where ca.degree=?",str);
System.out.println(list3);//1
int n=list3.size();
Suiji sx=new Suiji10();
list2=sx.take(n);
Iterator iterator1=list2.iterator();
while(iterator1.hasNext()){
int j=(Integer)iterator1.next();
int k=list3.get(j-1);
list1.add(k);
}
System.out.println(list1);//2
//Iterator iterator2=list1.iterator();
/* while(iterator2.hasNext()){
int z=(Integer)iterator2.next();
System.out.print(z+" ");//3
Calking cal=(Calking) this.getHibernateTemplate().getSessionFactory().openSession().get(Calking.class, z);//按照随机数作为id来加载对象
//Calking cal=(Calking) this.getHibernateTemplate().getSessionFactory().openSession().get(Calking.class, z);
list.add(cal);
}*/
for(int a=0;a<list1.size();a++){
int b=list1.get(a);
System.out.print(b);
Calking cal=(Calking) this.getHibernateTemplate().load(Calking.class, b);//按照随机数作为id来加载对象
System.out.println(cal);
list.add(cal);
}
System.out.println(list.size());//此处没有打印出对象,估计是没有加载上,问题为加载的对象为7个,打印得到的随机数为8个
return list;
}
现在问题是上面写的那样,而且现在有一个异常:
org.hibernate.LazyInitializationException: could not initialize proxy - no Session
org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:57)
org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:111)
org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.invoke(CGLIBLazyInitializer.java:150)
com.zq.model.Calking$$EnhancerByCGLIB$$6a3f08af.toString(<generated>)
问题解决中,也期待看到的高人们指点指点。谢谢。
分享到:
相关推荐
SSH整合是Java Web开发中常见的一个技术组合,指的是Spring、Struts和Hibernate三个开源框架的集成。Spring提供了依赖注入和面向切面编程的能力,Struts则处理MVC(Model-View-Controller)架构中的控制器部分,而...
SSH整合是Java开发中一种常见的框架集成方式,它结合了Struts2、Spring和Hibernate三个开源框架,以实现高效、灵活的企业级应用开发。这里提到的"ssh整合所需所有架包"是一个包含这三个框架相应版本的集合,确保它们...
SSH整合在IT行业中通常指的是Struts、Hibernate和Spring三大框架的集成应用,它们是Java Web开发中的重要组件,尤其在企业级应用系统中广泛应用。银行管理系统是一个典型的业务复杂、安全性要求高的应用场景,SSH...
SSH整合是Java Web开发中的一种常见技术栈,主要包括Spring、Struts和Hibernate这三个框架的集成。这个名为"SSH整合小项目"的资源提供了一个实践示例,帮助开发者理解和掌握这三大框架协同工作的机制。 首先,...
SSH整合是指将Struts、Spring和Hibernate这三个Java开源框架结合在一起,用于构建高效、可维护的企业级Web应用程序。Struts提供了MVC(Model-View-Controller)架构,Spring强化了依赖注入和事务管理,而Hibernate则...
在实际项目开发中,SSH整合还需要考虑其他方面,如安全、性能优化、异常处理等,但核心仍然是如何有效地协调这三个框架,使它们协同工作,提供高效、稳定、可维护的Java Web应用。理解并掌握SSH整合的知识,对于提升...
SSH整合在IT行业中通常指的是Spring、Struts和Hibernate这三个开源框架的集成,它们分别是用于处理应用层业务逻辑、表示层视图控制以及持久层数据访问的技术。这些框架的结合能够帮助开发者构建高效、灵活且可维护的...
在进行SSH整合时,通常是指将Struts、Spring和Hibernate这三个流行Java框架结合使用,以实现更高效、安全的企业级应用开发。下面将详细讨论在SSH整合过程中可能遇到的问题及其解决方案。 1. **依赖冲突**:由于...
总之,SSH整合过程中出现"creating bean with name 'sessionFactory' defined in class path"异常通常是由于缺少必要的依赖包,特别是javassist包,而补充该包后问题通常可以得到解决。通过了解和掌握SSH框架及其...
SSH整合是Java Web开发中的一种经典技术栈,由Spring、Struts和Hibernate三个框架组成,分别负责控制层、视图层和持久层的功能。在这个实例中,我们将深入探讨SSH整合的实现过程,以及如何利用这些技术进行增删改查...
SSH整合的实践中,还需要关注性能优化、安全性、异常处理等问题。例如,使用Spring AOP进行切面编程,提高代码复用性;通过Struts2的拦截器实现权限控制和日志记录;利用Hibernate的二级缓存提高查询效率。此外,...
在实际开发中,SSH整合还有许多细节需要注意,如异常处理、性能优化、安全配置等。开发者还需要熟悉这三个框架的API和最佳实践,以确保项目的稳定性和可扩展性。总的来说,SSH整合是一项技术性强且需要深入理解各个...
SSH整合是指将Spring、Struts2和Hibernate这三个流行的开源框架集成到一个项目中,以便实现高效、灵活且可维护的企业级应用开发。标题中的“一个简单的ssh整合项目”表明这是一个面向初学者的基础教程,旨在帮助他们...
SSH整合基本开发包是Java开发中的一个重要组成部分,SSH是指Spring、Struts和Hibernate这三个开源框架的缩写。这些框架在企业级应用开发中被广泛使用,它们分别负责控制层、表现层和持久层的管理。下面我们将详细...
学习SSH整合,首先需要理解每个框架的基本概念和工作原理,然后学习如何配置它们,例如Struts的struts-config.xml、Spring的applicationContext.xml以及Hibernate的hibernate.cfg.xml和映射文件。接着,实践创建简单...
在SSH整合中,Spring主要作为应用的核心,负责管理其他组件,如Struts和Hibernate,通过Bean工厂和ApplicationContext实现对象的创建和管理。 2. **Struts框架**:Struts是基于MVC(Model-View-Controller)设计...
SSH整合是指Spring、Struts和Hibernate这三大开源框架的集成应用,它们在Java Web开发中被广泛使用。本文将深入探讨SSH整合过程中可能遇到的问题,特别是关于Oracle和Sql Server数据库驱动的相关知识点。 首先,SSH...
SSH整合,全称为Struts2、Spring和Hibernate的整合,是Java Web开发中常见的三大框架集成,用于构建高效、可维护的Web应用。这个项目"SSH整合留言板功能"旨在演示如何将这三个框架协同工作,实现一个用户登录和留言...
SSH整合是指Spring、Struts2和Hibernate这三大开源框架的集成应用,它们分别负责控制层、表现层和持久层的功能。在本例子中,我们将详细探讨如何将这三个框架整合在一起,实现一个完整的用户注册和登录功能。 首先...