Pergunta

Eu estou usando a seguinte abordagem para resolver o problema de inicialização lenta em hibernação. Por favor me diga se ele vai funcionar ou não. Eu tenho que implementar minha transcation na minha persistência camada compulsary devido a algumas razões.

public class CourseDAO {

    Session session = null;

    public CourseDAO() {
        session = HibernateUtil.getSessionFactory().getCurrentSession();
    }

    public Course findByID(int cid) {
        Course crc = null;
        Transaction tx = null;
        try {
            tx = session.beginTransaction();
            Query q = session.createQuery(
                "from Course  as course where course.cid = "+cid+" "
            );
            crc = (Course) q.uniqueResult();
            //note that i am not commiting my transcation here.
            //Because If i do that i will not be able to do lazy fetch
        }
        catch (HibernateException e) {
            e.printStackTrace();
            tx.rollback();
            throw new DataAccessLayerException(e);
        }
        finally {
            return crc;
        }
    }

}

e no filtro eu estou usando o código folling

session = HibernateUtil.getSessionFactory().getCurrentSession(); 
if(session.isOpen())
    session.getTransaction().commit();

É este o caminho certo? ele pode pode ter qualquer problema.

Foi útil?

Solução

Certifique-se de que você sempre confirmação ou reversão e, em seguida, sempre perto da sua sessão. Basicamente, os seus recursos (transação e sessão) deve ser liberado não importa o que, por exemplo, eles podem ser colocados dentro de apropriada finalmente bloquear (no caso de sessão) ou em ambos os blocos try e catch (no caso de transacção).

Em geral, a alocação e liberação de recursos em diferentes camadas de aplicação é anti-padrão - Se sua arquitetura forças você em aplicação de anti-padrão, em seguida, há mais perguntas a fazer aqui ... Por exemplo, pense no que você deve fazer no seu "filtro" se a sessão acontece a ser fechado ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top