知识大全 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

相关参考