首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 操作系统 >

使用clone解决hibernate+spring集成中的延迟加载有关问题及分析(no session or session was closed)

2012-07-02 
使用clone解决hibernate+spring集成中的延迟加载问题及分析(no session or session was closed)?@Override

使用clone解决hibernate+spring集成中的延迟加载问题及分析(no session or session was closed)

?

@Override protected Object clone() throws CloneNotSupportedException { return super.clone(); }

?

要进行deep clone操作必须把protected改为 public,并且把返回的object改为具体的Bean对象。

?

3、执行clone操作。

首先,前提当然是确保事务结束之前session未被关闭,可以使用get实体的操作。


然后看下面例子

public List<AccAlias> listAccAlias() { List<AccAlias> all = AccAliasDAO.findAll(); if (all != null && !all.isEmpty()) for (AccAlias accAlias : all) { try { Mailbox mailbox = accAlias.getMailbox(); if(mailbox!=null){ mailbox = mailbox.clone(); accAlias.setMailbox(mailbox); } } catch (CloneNotSupportedException e) { e.printStackTrace(); } } return all; }

?

后续问题研究:

?

姑且作为一个比较非主流的解决方案吧,是否适合还是要看大家需求的,没有一套方案是绝对适合的。


使用clone解决延迟加载的弊端:

1、clone的实际开销。

2、查询方式的依赖性。必须根据ID查询方式来查询实体。而且更可以认为耦合度提高了,因为业务层clone操作有时必须依赖DAO特定的查询方式。


当然这些弊端也幸好仅仅针对使用到需要解决延迟加载的时候触发。


经验分享,给大家提供多一套解决方案吧。鱼与熊掌,自己衡量使用。

热点排行