2011-02-02 2 views
1


Я ищу хороший способ управлять сеансом спящего режима через веб-приложение. Моя проблема в том, что я не хочу разрешать доступ к сеансу на уровне представления или API. поэтому я создал следующий метод в своем абстрактном классе BaseDao. метод методаЭто хороший подход для управления сеансом спящего режима?

protected static Session getSession() { 
    if(!session.isOpen()){ 
     session = sessionFactory.openSession(); 
    }else{ 
     session.clear(); 
    } 
    return session; 
} 

использование:

public IHibernateBean save(IHibernateBean bean) { 
    Transaction t = session.beginTransaction(); 
    getSession().saveOrUpdate(bean); 
    t.commit(); 
    return bean; 
} 

public IHibernateBean getByPK(Class<?> class1 , Long pk) { 
    IHibernateBean hibernateBean = (IHibernateBean) getSession().get(class1 , pk); 
    return hibernateBean; 
} 

ответ

2

Вы можете использовать контекстный сеанс, полученный с помощью SessionFactory.getCurrentSession() см 2.3. Contextual sessions.

Также см. Generic Data Access Objects, например, о типичной реализации DAO.

+0

Спасибо, как насчет моего кода, это хороший подход? – fatnjazzy

+0

@fatnjazzy: Это определенно не очень хорошо, поскольку сеансы не закрываются. Использование контекстных сеансов решает эту проблему, закрывая сеансы неявно. – axtavt

+0

Если мы закрываем сеансы, то при получении LAZY, он дает ошибку, говоря, что сессия закрыта, как ее решить? –

0

Я бы ответил на вопрос axtavt. Также как дополнительная информация, если вы используете контейнер, поддерживающий Java EE (например, JBoss AS), затем используйте EntityManager, которым он управляет. Это особенно удобно в Java EE 6 с CDI.

Смежные вопросы