Set set = user.getCourse();       
list = new ArrayList(set);   //在此处报异常可能是你的set 为null.

解决方案 »

  1.   

    set 应该不为null,因为我曾用 if(set == null)进行调试判断,结果并不为null,原因应该是在对获取的set进行读取的时候出现错误,因为我用int t = set.size();这条语句去判断其大小时,也在这条语句报异常,但我不明白的是为什么对set进行读取的时候为什么会异常??
    下面是myeclipse控制台报出的sql语句(在读出这些语句之后就报异常):
    Hibernate: select user0_.id as id0_0_, user0_.name as name0_0_, user0_.password as password0_0_, user0_.account as account0_0_, user0_.sex as sex0_0_, user0_.college as college0_0_, user0_.type as type0_0_ from t_user user0_ where user0_.id=?Hibernate: select course0_.user_id as user1_1_, course0_.course_id as course2_1_, course1_.id as id2_0_, course1_.course_code as course2_2_0_, course1_.course_name as course3_2_0_ from t_record course0_ left outer join t_course course1_ on course0_.course_id=course1_.id where course0_.user_id=?Hibernate: select course0_.id as id2_0_, course0_.course_code as course2_2_0_, course0_.course_name as course3_2_0_ from t_course course0_ where course0_.id=?从这些语句中好像是在对set读取一个元素之后就产生异常...
     
      

  2.   

    Set set = user.getCourse();
    你配置文件中<set name="Course" table="t_record" cascade="save-update">   
    <key column="user_id" />   
    <many-to-many class="Course" column="course_id" />   
    </set>这里的set不是说查询结果是放在set集合中的。
    另外hibernate有延迟加载的设置,你的course是关联表中的数据,user是查出来了,不过course不一定,可以进行一些设置,ms是lazy属性。
    还有你使用get方法查询,不知道这个方法和关联抓取有没有冲突或影响,可以去google一下,有影响的话就用sql或hql吧,可以显示控制关联抓取,更好
      

  3.   

    多谢各位,问题已经解决,通过高人指点在hibernate.cfg.xml加一个SelectMethod=Cursor参数就行了,因为我用的是SQLServer2000,但是SelectMethod=Cursor这个参数有什么用处呢?本人还是有点不解
      

  4.   

    老问题了
    http://www.wangchao.net.cn/bbsdetail_64930.html
      

  5.   

    用SQL Server驱动一次select很多数据最好在connection string中加上SelectMethod=Cursor,以利用服务器端游标加快速度,其实不只sqlserver,oracle的jdbc,只要使用PreparedStatement,驱动默认就使用游标,sqlserver则不然,必须使用SelectMethod=Cursor才打开游标出处http://www.cjsdn.net/post/view?bid=10&id=152734&sty=3&age=0