|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
在1995年5月23日以“Java”的名称正式发布了。成绩利用Hibernate时不测报错:
Exceptioninthread"main"org.hibernate.LazyInitializationException:couldnotinitializeproxy-theowningSessionwasclosedatorg.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:53)atorg.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:84)atorg.hibernate.proxy.CGLIBLazyInitializer.intercept(CGLIBLazyInitializer.java:134)atcom.entry.database.bean.OaLoginLink$EnhancerByCGLIB$a418b18d.getName(<generated>)attest.Test.main(Test.java:145)
非常让我头痛,上彀检察相干材料发明如许一个办理体例:
"org.hibernate.LazyInitializationException:couldnotinitializeproxy"提早抓掏出的错,hb3对many-to-one的默许处置是lazy="proxy",没有弄懂究竟怎样回事,把一切many-to-one,one-to-one都加上lazy="false"...
这个办法实际上没错,可是会让人发生曲解,令人觉得只是修正<set>中的lazy值,照做后程序仍然会报错,看看上面的文章大概就分明了(注重最初一行白色标志)!
lazyinitialization
汇合(不包含数组)是能够提早初始化的,意义是仅仅当使用程序必要会见时,才载进他们的值。
s=sessions.openSession();
Useru=(User)s.find("fromUseruwhereu.name=?",userName,
Hibernate.STRING).get(0);
Mappermissions=u.getPermissions();
s.connection().commit();
s.close();
IntegeraccessLevel=(Integer)permissions.get("accounts");//Error!
由于在commit之前,permissions没有被用到,permission没有被初始化,而session被close了,招致permissions永久都没法loaddata.
办理举措:吧最初一行一道session被提交之前.
设置:
<setname="names"table="NAMES"lazy="true"order-by="nameasc">
<keycolumn="group_id"/>
<elementcolumn="NAME"type="string"/>
</set>
==================================
在做Spring1.2+Hibernate3+strutsdemo时分碰到一个成绩,编纂用户数据时分
用com.jeedev.service.dao.hibernate.UserHibernateDao中publicTSysusergetUser(intuserid){}办法,老是不克不及一般显现编纂数据。详细体现为:
参考com.jeedev.service.dao.hibernate.UserHibernateDao第32-45行
java代码:
publicTSysusergetUser(intuserid){
if(this.getHibernateTemplate()==null){
System.out.println("erroratthere");
returnnull;
}
TSysuseredituser=(TSysuser)getHibernateTemplate().load(TSysuser.class,newInteger(userid));
System.out.println(edituser.getUsername());
System.out.println(edituser.getDeptno());
returnedituser;
}
假如删除下面的
java代码:
System.out.println(edituser.getUsername());
System.out.println(edituser.getDeptno());
在点击编号,修正时分就会呈现毛病:
2005-10-2715:35:59,245ERROR[org.hibernate.LazyInitializationException]-couldnotinitializeproxy-theowningSessionwasclosed
org.hibernate.LazyInitializationException:couldnotinitializeproxy-theowningSessionwasclosed
经由在javaeye论坛人人分歧以为是hibernatelazy的缘故原由
在WEB级别使用时分,会呈现意想不到的lazy毛病,办理办法就是设置lazy="false"例:
<hibernate-mapping>
<classname="com.jeedev.hb.TSysuser"table="t_sysuser"lazy="false">
JAVA学习必须明确这是一项投资,对于大多数的人来说,学习JAVA是为了就业,还有就是刚走向工作位置的朋友想尽快赶上工作的节奏。 |
|