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 ;
- }
- }