Open Session View - Lazy Inicialization Exception - RichFaces/Hibernate

Bom dia Pessoal;

Estou com um problema a tempos, e tenho estudado bastante, mais ainda não consegui resolver… por isso peço a ajuda de todos;

Utilizo JSF 1.2 (RichFaces) e Hibernate 3, e implementei o padrão Open Session in View q segue

FiltroHibernate


public class FiltroHibernate implements Filter{
	
	public void init(FilterConfig config) throws ServletException{

	}
	
	public void doFilter(ServletRequest request, ServletResponse response,
						 FilterChain chain) throws IOException, ServletException{
		
		try{
			HibernateUtility.beginTransaction();
			ControleExcecao.causa = null;
			ControleExcecao.excecao = null;
			ControleExcecao.informacao = null;
			ControleExcecao.confirmacao = null;
			chain.doFilter(request, response);
			HibernateUtility.commitTransaction();
		}catch (HibernateException e) {
			e.printStackTrace();
			HibernateUtility.rollbackTransaction();
		}finally{
				HibernateUtility.closeSession();
		}
	}
	
	public void destroy() {
 
	}

HibernateUtility

public class HibernateUtility {

    private static SessionFactory factory;
    private static final ThreadLocal<Session> sessionThread = new ThreadLocal<Session>(); 
    private static final ThreadLocal<Transaction> transactionThread = new ThreadLocal<Transaction>();
    
    static {
    	//Bloco estático que inicializa o Hibernate
    	try {
    		factory = new Configuration().configure().buildSessionFactory();
    	} catch (Exception e) {
    		e.printStackTrace();
    		factory = null;
    	}
    }
    
	public static Session getSession() {
    	Session session = (Session) sessionThread.get();
    	if (session == null) {
    		session = factory.openSession();
    		sessionThread.set( session );
    		
    	} return 
    		sessionThread.get();
    		
    } 
    
    public static void closeSession() {
    	Session session = sessionThread.get(); 
    	if ( session != null && session.isOpen() ) { 
    		sessionThread.set(null); 
    		session.close(); 
    	} 
    } 
    
    public static void beginTransaction() { 
		Transaction transaction = getSession().beginTransaction(); 
		transactionThread.set(transaction);
    } 
    
    public static void commitTransaction() { 
    	Transaction transaction = transactionThread.get(); 
    	if ( transaction != null && !transaction.wasCommitted() && !transaction.wasRolledBack() ) {
    		transaction.commit(); 
    		transactionThread.set(null);
    	} 
    } 
    
    public static void rollbackTransaction() { 
    	Transaction transaction = transactionThread.get(); 
    	if ( transaction != null && !transaction.wasCommitted() && !transaction.wasRolledBack() ) { 
    		transaction.rollback(); 
    		transactionThread.set(null);
    	} 
    }

Tenho o objeto CargoDTO com várias listas… segue um pedaço do hbm dele

<set name="listaCargoConhecimento" table="tab_cargoconhecimento" inverse="false">
	  	<key column="crgoSeq"/>
	    <composite-element class="br.sdg.recursoshumanos.controle.CargoConhecimentoDTO">
			<parent name="cargo"/>
		    <many-to-one name="conhecimento" column="conhSeq" class="br.sdg.recursoshumanos.controle.ConhecimentoDTO" not-null="true" />
		    <many-to-one name="usuario" column="usuaSeq" class="br.sdg.portal.UsuarioDTO" not-null="true" />
		    <property name="crcoDesc"  />
	    </composite-element>
    </set>
    
    <set name="listaCargoAtividade" table="tab_cargoatividade" inverse="false">
		<key column="crgoSeq" />
		<composite-element class="br.sdg.recursoshumanos.controle.CargoAtividadeDTO">
			<parent name="cargo" />
			<many-to-one name="atividade" column="ativSeq" class="br.sdg.recursoshumanos.controle.AtividadeDTO"/>
			<many-to-one name="tipoAtividade" column="tiatSeq" class="br.sdg.principal.dominio.TipoAtividadeDTO" />
		</composite-element> 
	</set>
	
	<set name="listaCargoComplexidade" table="tab_cargocomplexidade" inverse="false">
		<key column="crgoSeq" />
		<many-to-many class="br.sdg.principal.dominio.TipoComplexidadeDTO" column="ticmSeq" />
	</set>

Meu problema consiste no seguinte…

Tenho uma tela de manter, onde eu listo os cargos conforme os filtros selecionados em um componente HtmlExtendedDataTable

O usuário seleciona um Cargo, e clica em alterar, e eu redireciono o mesmo para a tela de edição…

Nessa tela de edição, cada lista do cargo fica dentro de uma aba (HtmlTabPanel), pra evitar a barra de rolagem.

O que eu não consigo é carregar as listas (e permitir a edição das mesmas, ou seja, adicionar e excluir itens da lista), pq a sessão já está fechada, e as listas não foram carregadas.

Tentei fazer um session.load no objeto, mais quando eu manipulo a lista (adiciono, ou excluo) objetos da mesma, o load retorna a lista para o seu estado anterior, acabando com minha modificação…

Alguem sabe o q estou fazendo de errado??? Se precisarem de mais códigos para analisarem a minha situação é só falar…

desde já agradeço por toda a ajuda…