Por que não posso fechar minha sessão no Hibernate?

Oi GUJ,
pessoal é uma dúvida que tenho, o seguinte código não funciona:

    public static List<Lote> retornarMeusLotes(Usuario usuario) {
        List<Lote> lotes = null;

        Session session = HibernateUtil.getSessionFactory().openSession();
        session.beginTransaction();

        try {
            Query query = session.createQuery("select lote from Lote lote where lote.usuario.email= :email");
            query.setParameter("email", usuario.getEmail());

            if (query.list().size() > 0) {
                lotes = (List<Lote>) query.list();
            }

        } catch (HibernateException he) {
            session.getTransaction().rollback();
            System.out.println("CONEXAO BD - RETORNAR MEUS LOTES" + he.getCause().getLocalizedMessage());
        } finally {
            session.clear();
            session.close();
        }

        return lotes;
    }

Este funciona:

    public static List<Lote> retornarMeusLotes(Usuario usuario) {
        List<Lote> lotes = null;

        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();

        try {
            Query query = session.createQuery("select lote from Lote lote where lote.usuario.email= :email");
            query.setParameter("email", usuario.getEmail());

            if (query.list().size() > 0) {
                lotes = (List<Lote>) query.list();
            }

        } catch (HibernateException he) {
            session.getTransaction().rollback();
            System.out.println("CONEXAO BD - RETORNAR MEUS LOTES" + he.getCause().getLocalizedMessage());
        }

        return lotes;
    }

Notem que a diferença é que no que não funciona eu abro uma sessão, e no outro eu pego a sessão atual.
E que no que não funciona eu limpo e fecho a sessão, e no outro eu não limpo e nem fecho.

Por que dá errado ?
Não temos que limpar e fechar a sessão toda vez ?