SSH整合异常

最近在项目中出现了一些奇怪问题,还是说说我的目的吧,我想要在数据库中随机抽取一定数量且符合要求的记录,第一种实现,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>)

问题解决中,也期待看到的高人们指点指点。谢谢。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值