Spring 如何使用OpenSessionInviewWinterCeptor?

Spring 如何使用OpenSessionInviewWinterCeptor?,spring,hibernate,spring-mvc,lazy-initialization,Spring,Hibernate,Spring Mvc,Lazy Initialization,考虑实体 public class User { ... @OneToMany(cascade = CascadeType.ALL) List<SocialCredential> credentialsList = new ArrayList<SocialCredential> (); } 和控制器 @Controller public class DummyController { @Autowired UserDAO use

考虑实体

public class User {
...
@OneToMany(cascade = CascadeType.ALL)
List<SocialCredential> credentialsList = new ArrayList<SocialCredential>  ();
}
和控制器

@Controller
      public class DummyController {
       @Autowired
       UserDAO userDAO;

       public void anyMethodAccessedByGetORPost(){
         User u= userDAO.getUser(1L);
       }
      }

实体用户的简单查询会自动触发查询以初始化SocialCredential?的实体列表?最终,它导致了LazyInitializationException。我开始了解OpenSessionInViewInterceptor,它可以解决这个问题。我如何应用它。我已经在跟踪,但到目前为止没有成功

实体用户的简单查询自动触发查询以初始化SocialCredential的实体列表

它取决于底层持久性API的默认获取类型。

最终导致LazyInitializationException——这可能是您在会话关闭后尝试访问
CredentialList
集合

用下面的代码替换DAO的
getUser(Long id)
方法可以解决
LazyInitializationException

@Transactional
@Override
public User getUser(long id){
   Session s = sessionFactory.getCurrentSession();
   User u = (User) s.get(User.class, id);
   if (u != null) {
      u.getCredentialsList(); //it loads the SocialCredentials before session closes.
   }
   return u;
}

谢谢你,但这并不是我问题的答案。这是一种恶意加载分离实体的方法,可以使用FetchType.EAGER轻松完成。正如我的问题所述,我对实现OpenSessionInviewWinterCeptor感兴趣。
@Transactional
@Override
public User getUser(long id){
   Session s = sessionFactory.getCurrentSession();
   User u = (User) s.get(User.class, id);
   if (u != null) {
      u.getCredentialsList(); //it loads the SocialCredentials before session closes.
   }
   return u;
}