JS延迟加载 hibernate的延迟加载通用方法
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当中使用 这个就太简单了吧
怎么样?呵呵呵
lishixinzhi/Article/program/Java/ky/201311/28589