读书人

使用clone解决hibernate+spring集成中

发布时间: 2012-07-02 17:46:22 作者: rapoo

使用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特定的查询方式。


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


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

读书人网 >操作系统

热点推荐