浏览 1248 次
锁定老帖子 主题:SSH整合异常
该帖已经被评为隐藏帖
|
|
---|---|
作者 | 正文 |
发表时间:2009-12-16
最近在项目中出现了一些奇怪问题,还是说说我的目的吧,我想要在数据库中随机抽取一定数量且符合要求的记录,第一种实现,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>) 问题解决中,也期待看到的高人们指点指点。谢谢。
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-12-16
最后修改:2009-12-16
Hibernate.initialize(); 用下这个看看.......... 或者用 openSessionView |
|
返回顶楼 | |