Melhor refactor para obter independência no HIBERNATE

Olá pessoal, bom dia!

Eu tenho a seguinte classe abaixo:

package dao;

import model.DAO;

import org.hibernate.Session;
import org.hibernate.Transaction;

import usuario.Usuario;
import util.HibernateUtil;

public class DaoFactory {

	private final Session session;
	private Transaction transaction;
	
	public DaoFactory() {
		session = HibernateUtil.getSession();
//		this.session = session;
	}
	
	public void beginTransaction() {
		this.transaction = this.session.beginTransaction();
	}
	
	public void commit() {
		this.transaction.commit();
		this.transaction = null;
	}
	
	public boolean hasTransaction() {
		return this.transaction != null;
	}
	
	public void rollBack() {
		this.transaction.rollback();
		this.transaction = null;
	}
	
	public void close() {
		this.session.close();
	}
	
	public DAO<Usuario> getUsuarioDAO() {
		return new DAO<Usuario>(this.session, Usuario.class);
	}

}

Logo a seguir, tenho outra classe DAO Generic:

package model;

import java.util.List;

import org.hibernate.Session;

public class DAO<T> {

	private final Session session;
	@SuppressWarnings("unchecked")
	private final Class classe;

	@SuppressWarnings("unchecked")
	public DAO(Session session, Class classe) {
		this.session = session;
		this.classe = classe;
	}

	public void adicionar(T usuario) {
		this.session.save(usuario);
	}

	public void remover(String cpf) {
		this.session.delete(cpf);
	}

	public void atualizar(T usuario) {
		this.session.merge(usuario);
	}

	@SuppressWarnings("unchecked")
	public T procurar(Long id) {
		return (T) session.load(this.classe, id);
	}

	@SuppressWarnings("unchecked")
	public List<T> listarTodos() {
		return this.session.createCriteria(this.classe).list();
	}
}

Por fim, tenho uma classe qualquer, onde estou testando inserir, alterar, excluir, etc.:

package main;

import model.DAO;
import usuario.Usuario;
import dao.DaoFactory;

public class TestaUsuario {

	public static void main(String[] args) {

		/**
		 * Cria um Usuaário
		 */
		Usuario usuario = new Usuario();
		usuario.setNome("Apolo");
		usuario.setLogin("Justino");
		usuario.setSenha("1111112");

		/**
		 * Cria DAO
		 */
		DAO<Usuario> usuarioDAO = new DaoFactory().getUsuarioDAO();
		usuarioDAO.adicionar(usuario);
		
//		DAO<Usuario> usuarioDAO = new DAO<Usuario>(Usuario.class);
		
//		DaoFactory daoFactory = new DaoFactory();
//
//		daoFactory.beginTransaction();
//		usuarioDAO.adiciona(usuario);
//		daoFactory.commit();
//		daoFactory.close();
		
		

		/**
		 * Abre transação e insere
		 */
//		 Transaction t = session.beginTransaction();
//		 usuarioDAO.adiciona(usuario);
//		 t.commit();
		/**
		 * Lista todos os usuarios
		 */
		// usuarioDAO.listaTodos();
//		List<Usuario> lista = usuarioDAO.listaTodos();
//		for (Usuario u : lista) {
//			System.out.println("Usuario: " + u.getLogin());
//		}

//		usuarioDAO.listaTodos();

	}
}

Reparem que na classe TestaUsuario não estou usando nada de HIBERNATE ou SESSION.

Gostaria de poder utiliza-la sem a depedência do hibernate ou session.
O problema é que na classe DaoFactory eu retorno uma session de hibernateUtil, pois se fosse para passar uma
session como parâmetro, deixaria minha clase TestaUsuario dependente de Session.

Outra coisa; A classe DAO está passando uma Session como parâmetro.

O que acontece é que as classes estão trabalhando com sessions diferentes…

Alguem tem alguma sugestão para resolver essa “dependência” entre os Dao’s [color=red]usando a mesma session[/color]?

Desde já, agradeço!
Abc

Se quer independência do Hibernate, porque não utiliza JPA?

Assim poderá utilizar um EntityManager, e não dependerá do seu HibernateUtil

Porque fiz o curso do java avançado, mas somente agora estou tendo tempo para estudar com mais calma cada assunto.

inclusive estou implementando esse DAO pra ser implementado pra WEB.
Depois de pegar uma certa experiência, procuro outros frameworks e tecnologias dentro de java.

No momento, só gostaria que alguem possa me dar uma sugestão para melhoria e melhor uso do código acima.

Desde já, agradeço!
abc