hibernate的懒加载问题时常会困扰着我们, 今天发现了hibernate自身也提供一些解决办法
Hibernate.initialize(company.getUsers()); 这样就加载了users集合
但不支持递归加载
it is not guaranteed that the elements INSIDE the collection will be initialized/materialized
假如这时session关闭了 会报错
真正解决懒加载还是应该在类的设计 xml文件的配置上下功夫
源码:
/**
* Force initialization of a proxy or persistent collection.
* <p/>
* Note: This only ensures intialization of a proxy object or collection;
* it is not guaranteed that the elements INSIDE the collection will be initialized/materialized.
*
* @param proxy a persistable object, proxy, persistent collection or <tt>null</tt>
* @throws HibernateException if we can't initialize the proxy at this time, eg. the <tt>Session</tt> was closed
*/
public static void initialize(Object proxy) throws HibernateException {
if ( proxy == null ) {
return;
}
else if ( proxy instanceof HibernateProxy ) {
( ( HibernateProxy ) proxy ).getHibernateLazyInitializer().initialize();
}
else if ( proxy instanceof PersistentCollection ) {
( ( PersistentCollection ) proxy ).forceInitialization();
}
}
/**
* Check if the proxy or persistent collection is initialized.
*
* @param proxy a persistable object, proxy, persistent collection or <tt>null</tt>
* @return true if the argument is already initialized, or is not a proxy or collection
*/
public static boolean isInitialized(Object proxy) {
if ( proxy instanceof HibernateProxy ) {
return !( ( HibernateProxy ) proxy ).getHibernateLazyInitializer().isUninitialized();
}
else if ( proxy instanceof PersistentCollection ) {
return ( ( PersistentCollection ) proxy ).wasInitialized();
}
else {
return true;
}
}
Hibernate懒加载
本文探讨了Hibernate框架中懒加载机制的问题及解决方案,介绍了如何通过Hibernate.initialize()方法强制初始化延迟加载的对象,但该方法不支持递归加载。此外,还强调了正确的类设计与XML配置对于解决懒加载问题的重要性。
2391

被折叠的 条评论
为什么被折叠?



