zqiangzhang 2009-12-16 19:08
浏览 194
已采纳

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>)

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

 


问题补充:
问题已解决,主要还是配置问题,一楼的方案之前我也用过,配上去就错,不过现在改变了一些配置还是解决了,用的是OpenSessionInViewFilter,这样可以保证session链接不会被用完,而且这个配置好像得配到struts2的filter之前
<filter>
        <filter-name>OpenSessionInViewFilter</filter-name>
        <filter-class>
            org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
        </filter-class>
    </filter>
    <filter-mapping>
        <filter-name>OpenSessionInViewFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping> 
<filter>,现在ok了,谢谢关注
  • 写回答

1条回答 默认 最新

  • dhyanshi 2009-12-16 19:08
    关注

    [code="java"]
    Hibernate.initialize();
    [/code]
    用下这个看看..........
    或者用
    openSessionView

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 spring后端vue前端
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题