以前用的都是createQuery方法,再取得list的第一项来获得对象,后来发现这样很笨,可以用get方法直接获得对象,再后来从网上看到load方法,用法与get相似,只是在网上说如果没有获得对象的话get方法返回的是一个null而load返回的是一个空代理异常
(could not initialize proxy - the owning Session was closed)
又查了查相关资料,才知道load主要是来获取二级缓存中的对象 而不用访问数据库
可以做了例子 还是出现上面说的异常 真不知道为什么
请教load方法到底是做什么用的 在什么时候用它最合适
(could not initialize proxy - the owning Session was closed)
又查了查相关资料,才知道load主要是来获取二级缓存中的对象 而不用访问数据库
可以做了例子 还是出现上面说的异常 真不知道为什么
请教load方法到底是做什么用的 在什么时候用它最合适
get:对象的所有非lazy属性在调用此方法之后的任何时候可用
原理就如flyxxxxx(灭神)所说.
UserInfo user1 = (UserInfo)session.get(UserInfo.class,"notexisting");
Debug.check(user1 == null);
UserInfo user = (UserInfo)session.load(UserInfo.class,"notexisting");
Debug.check(user != null);logger.info(user.getClass());
UserInfo user2 = (UserInfo)session.get(UserInfo.class,"notexisting");
Debug.check(user2 == user);
UserInfo user3 = (UserInfo)session.load(UserInfo.class,"notexisting");
Debug.check(user3 == user);
boolean error = false;
try{
Hibernate.initialize(user3);
}catch(ObjectNotFoundException e){
error = true;
}
Debug.check(error);
UserInfo user4 = (UserInfo)session.get(UserInfo.class,"notexisting");
Debug.check(user4 == user);
UserInfo user5 = (UserInfo)session.load(UserInfo.class,"notexisting");
Debug.check(user5 == user);