|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
Java编译的是字节码,跟C++相反,启动不够快,效率不够高,难以精确控制内存,但是优点是编程比C++容易,代码比较安全但是容易留下性能隐患,跨平台靠字节码在各个平台复制(一处编译到处调试)
在利用Ajax:HibernateEntity=>json,FlexRemoteObject:HibernateEntity=>ActionScriptObject的历程,常常碰着以下成绩:
成绩:
1.Hibernate碰着提早加载的属性会见时假如session被封闭则抛出LazyInitializationException
2.Hibernate中的one-to-many等联系关系干系在序列化时假如没有把持,则将全部数据库都有大概被全体序列化
3.过量的利用DTO/ValueObject办理这个成绩.
办理举措:
对Entity对象天生一个静态代办署理,拦阻getXXXX()办法,假如会见的是提早加载的属性,则returnnull,而不抛出LazyInitializationException,递回天生属性的代办署理,只需碰着未提早加载的属性,而序列化会主动中断.制止将全部Entity序列化传布,招致大概序列化全部数据库的成绩.
相似办理计划:
dwr中HibernateConverter,在序列化时如上相似,碰着提早加载的属性主动停止convert事情.而HibernateBeanSerializer则与日俱增,不管object=>json都能够事情.
利用用例:
Java代码
//role为原始对象
role=(Role)roleDao.getById(new Long(1));
//天生的静态代办署理proxyRole,会见提早加载的属性将returnnull
RoleproxyRole=(Role)new HibernateBeanSerializer<Role>(role).getProxy();
assertNotNull(role.getResource());
assertNull(proxyRole.getResource()); //提早加载,为null
Hibernate.initialize(role.getResource()); //抓取出去
assertNotNull(proxyRole.getResource()); //不为null
//role为原始对象
role=(Role)roleDao.getById(newLong(1));
//天生的静态代办署理proxyRole,会见提早加载的属性将returnnull
RoleproxyRole=(Role)newHibernateBeanSerializer<Role>(role).getProxy();
assertNotNull(role.getResource());
assertNull(proxyRole.getResource());//提早加载,为null
Hibernate.initialize(role.getResource());//抓取出去
assertNotNull(proxyRole.getResource());//不为null
<p>
net程序员的大部门代码都靠控件拖拽完成的,虽然java也有,但是无论从美观和速度上都没发和.net比。java程序员都是代码完成的,所以java程序员常戏称.net程序员是操作员,呵呵。 |
|