解决方案 »

  1.   

    你现在用Junit单元测试也会报错吗?
      

  2.   

    你用的junit测试,异常信息里的“session was closed”跟有没有开启“OpenSessionInViewFilter”没关系啊,“OpenSessionInViewFilter”只有通过网页访问的时候才起作用。所以问题很明显了,就是因为你用的spring管理的session,所以spring在查询完成后就把session关闭了。spring管理session的原则是:在哪里打开的,就在哪里关闭,不需要用户自己打开或者关闭。
      

  3.   

    默认加载多方是懒加载,除非强制指定:fetch=FetchType.EAGER
    @OneToMany(mappedBy = "subject", fetch=FetchType.EAGER,targetEntity = Reply.class, cascade = {CascadeType.PERSIST, CascadeType.REFRESH,CascadeType.REMOVE})
      

  4.   

    谢谢3楼,
    我知道问题出在那,主要还是想问下
    有什麽辦法獲取many 而又不設置 one获取数据时主动获取many(就是不指定fetch=FetchType.EAGER,,如4楼所说..),
      

  5.   


    要看事务边界,貌似是直接测试dao层,事务是不是放在service层?如果是,将测试类继承AbstractTransactionalJUnit4SpringContextTests,并在测试类上配置@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = false)和@Transactional。
      

  6.   


    不明白你想表达什么,默认就是懒加载调用get many方法时候才会去查many集合。如果不想在获取many集合的时候每个many对象又去反查一遍one的话,可以查查有个配置大概@ignorexxx这个的,我记不清了