知识大全 hibernate的延迟加载通用方法

Posted

篇首语:上下观古今,起伏千万途。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 hibernate的延迟加载通用方法相关的知识,希望对你有一定的参考价值。

  类名 HibernateUtil

  package antbee j eemodel util;

  import java lang reflect InvocationTargetException;

  import java lang reflect Method;

  import java util Collection;

  import java util Iterator;

  import springframework orm hibernate support HibernateDaoSupport;

  public class HibernateUtil extends HibernateDaoSupport

  /**

  * 初始化POJO类

  * @author @家军

  * @param object POJO对象

  * @param methodName 方法名称

  * @return

  * @version

  */

  public void initialize(Object object String methodName) throws SecurityException NoSuchMethodException IllegalArgumentException IllegalAccessException InvocationTargetException

  String[] methodArray = methodName split( \\\\ )

  Method method = null;

  Object initializeObject = object;

  if(methodArray length == )

  this getHibernateTemplate() lock(initializeObject hibernate LockMode NONE)

  method = object getClass() getMethod(methodArray[ ] new Class[] )

  initializeObject = method invoke(initializeObject new Object[] )

  this getHibernateTemplate() initialize(initializeObject)

  else

  for(int i= ;i<methodArray length;i++)

  method = initializeObject getClass() getMethod(methodArray[i] new Class[] )

  initializeObject = method invoke(initializeObject new Object[] )

  

  this getHibernateTemplate() lock(initializeObject hibernate LockMode NONE)

  this getHibernateTemplate() initialize(initializeObject)

  

  

  /**

  * 初始化POJO类

  * @author @家军

  * @param object POJO对象

  * @param methodName 方法名称数组

  * @return

  * @version

  */

  public void initialize(Object object String methodName[])

  throws SecurityException NoSuchMethodException

  IllegalArgumentException IllegalAccessException InvocationTargetException

  for (int i = ; i < methodName length; i++)

  String[] methodArray = methodName[i] split( \\\\ )

  Method method = null;

  Object initializeObject = object;

  if(methodArray length == )

  this getHibernateTemplate() lock(initializeObject hibernate LockMode NONE)

  method = object getClass() getMethod(methodArray[ ] new Class[] )

  initializeObject = method invoke(initializeObject new Object[] )

  this getHibernateTemplate() initialize(initializeObject)

  else

  for(int j= ;j<methodArray length;j++)

  method = initializeObject getClass() getMethod(methodArray[j] new Class[] )

  initializeObject = method invoke(initializeObject new Object[] )

  

  this getHibernateTemplate() lock(initializeObject hibernate LockMode NONE)

  this getHibernateTemplate() initialize(initializeObject)

  

  

  

  /**

  * 初始化POJO类

  * @author @家军

  * @param object POJO对象

  * @return

  * @version

  */

  public void initialize(Object object) throws SecurityException NoSuchMethodException IllegalArgumentException IllegalAccessException InvocationTargetException

  this getHibernateTemplate() lock(object hibernate LockMode NONE)

  this getHibernateTemplate() initialize(object)

  

  /**

  * 初始化POJO类

  * @author @家军

  * @param collection POJO对象集合

  * @param methodName 方法名称数组

  * @return

  * @version

  */

  public void initialize(Collection collection String methodName[])

  throws SecurityException NoSuchMethodException

  IllegalArgumentException IllegalAccessException InvocationTargetException

  for(Iterator i=erator() i hasNext()Wink

  Object object = i next()

  this initialize(object methodName)

  

  

  /**

  * 初始化POJO类

  * @author @家军

  * @param collection POJO对象集合

  * @param methodName 方法名称

  * @return

  * @version

  */

  public void initialize(Collection collection String methodName)

  throws SecurityException NoSuchMethodException

  IllegalArgumentException IllegalAccessException InvocationTargetException

  for(Iterator i=erator() i hasNext()Wink

  Object object = i next()

  this initialize(object methodName)

  

  

  

  这个方法的好外是 可以不在hbm xml的文件当中 指定为lazy=true这个模式 可以直接使用 使用方法如下

  如果你使用SPRING 则需要把hibernateUtil注入其中

  <bean id= hibernateUtilTarget class= antbee j eemodel util HibernateUtil >

  <property name= sessionFactory >

  <ref local= mssqlSessionFactory />

  </property>

  </bean>

  <bean id= hibernateUtil parent= BaseTransactionProxy class= springframework transaction interceptor TransactionProxyFactoryBean >

  <property name= target >

  <ref local= hibernateUtilTarget />

  </property>

  </bean>

  <! 配置基础事务 >

  <bean id= BaseTransactionProxy class= springframework transaction interceptor TransactionProxyFactoryBean abstract= true >

  <property name= transactionManager >

  <ref bean= mssqltransactionManager />

  </property>

  <property name= proxyTargetClass >

  <value>true</value>

  </property>

  <property name= transactionAttributes >

  <props>

  <prop key= * >PROPAGATION_REQUIRED</prop>

  </props>

  </property>

  </bean>

  使用示例

  如果你使用STRUTS 则需要这样

  List what_ur_view = XXXManager find( ) //取得你要展示的对象

  //如果这个对象当中有延迟加载的对象(SET)时 则需要如下加载就行

  this hibernateUtil initialize(what_ur_view getTbShipmentSale )

  //其中getTbShipmentSale是其对象(SET也可以操作)

  在页面显示的时候 你就可以使用JSTL如下表述

  <c:out value= $what_ur_view tbShipmentSale goodsReceivePersonPhone />//呵呵 是不是很爽呀

  同样的方法 我们也可以对一个SET在页面进行显示 方法如下

  <c:forEach items= $what_ur_view tbShipmentProductMappingSet var= ProductMapping varStatus= status >

  <c:out value= $ProductMapping productNum />

  <c:out value= $ProductMapping tbOutOfWarehouse outOfWarehouseNum />

  </c:forEach>

  //呵呵 支持多级嵌套

  在ACTION当中则需要加入hibernateUtil initialize(what_ur_view getTbShipmentProductMappingSet()

  new String[] getTbProduct getTbOutOfWarehouse

   getTbProductConfigure ) 呵 如果你要是在HIBERNATE当中使用 这个就太简单了吧

  怎么样?呵呵呵

cha138/Article/program/Java/ky/201311/28589

相关参考

知识大全 hibernate的优化-懒加载(lazy)

  为了进一步优化Hibernate的性能可以使用  延迟加载技术管理数据抓取策略进行缓存管理等方面考虑来提高Hibernate的性能  延迟加载(load)  延迟加载(load)是Hibernat

知识大全 集合属性的延迟加载

  Hibernae的延迟加载是一个非常常用的技术实体的集合属性默认会被延迟加载实体所关联的实体默认也会被延迟加载Hibernate通过这种延迟加载来降低系统的内存开销从而保证Hibernate的运行

知识大全 .net延迟加载的一般实现

  本文对延迟加载在常用控件的实现做简单的描述  一在界面第一次显示时加载  最简单的延迟加载可以通过控件第一次显示时加载数据例如你有很多的页签只有用户切换到这个页签时才会加载数据  在NET的Con

知识大全 Spring动态加载Hibernate映射文件

Spring动态加载Hibernate映射文件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nb

知识大全 js图片延迟加载的实现方法及思路

这里延迟加载的意思是拖动滚动条时在图片出现在浏览器显示区域后才加载显示   大概的实现方式是在页面的load没有触发之前把所有的指定id的元素内的img放入到imgs中将所有的图片的src值

知识大全 如何实现lazyload的图片延迟加载功能(1/2)

如何实现lazyload的图片延迟加载功能lazyload的难点在如何在适当的时候加载用户需要的资源(这里用户需要的资源指该资源呈现在浏览器可视区域)因此我们需要知道几点信息来确定目标是否已呈现在客户

知识大全 利用JS延迟加载百度分享代码,提高网页速度

利用JS延迟加载百度分享代码,提高网页速度  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  发现很

知识大全 jquery.lazyload 图片延迟加载实例

<!doctypepublic"//wc//dtdxtransitional//en""/dtd/xtransitionaldtd"><xmlns=""><head>

知识大全 Hibernate的延迟属性抓取

Hibernate的延迟属性抓取  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  再次犯了没有仔细

知识大全 Hibernate编写通用数据库操作代码

Hibernate编写通用数据库操作代码  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!insert