2015-03-31 3 views
0

Извините за мой английский. Я изучаю JavaEE, и я не знаю, правильно или нет, я использую сессию в спящем режиме. Как их использовать? Я использую шаблон DAO и hibernate. Подскажите, как использовать свойство сессииПравильное использование сеанса (спящий режим)

это HibernateUtil класс

private static final SessionFactory sessionFactory; 

    static { 
     try{ 
      sessionFactory = new Configuration().configure("/app/web/landingpage/HibernateConnect/hibernate.cfg.xml").buildSessionFactory(); 
     }catch(Throwable ex) { 
      System.out.println("Error " + ex); 
      throw new ExceptionInInitializerError(ex); 
     } 
    } 

    public static SessionFactory getSessionFactory() { 
     return sessionFactory; 
    } 

    public static void close(Session session) { 
      if (session != null) { 
       try { 
        session.close(); 
       } catch (HibernateException ignored) { 
        System.out.print("Couldn't close Session" + ignored); 
       } 
      } 
     } 

И этот класс делает все операции дб CategoryDaoImpl

public class CategoryDaoImpl implements CategoryDao{ 
    private Session session = null; 
    //get all category 
    public Collection getAllCategory() { 
      List categoris = new ArrayList<Category>(); 
      try{ 
       session = HibernateUtil.getSessionFactory().openSession(); 
       categoris = session.createCriteria(Category.class).list(); 
      }catch(Exception e) { 
       System.out.println("getAllCategory "+ e); 
      }finally{ 
       if(session != null && session.isOpen()) 
        session.close(); 
      } 


     return categoris; 
      } 
    //get category id 
    public Category getCategory(int id) { 

      Category cat = null; 
      try { 
       session = HibernateUtil.getSessionFactory().openSession(); 
       cat = (Category) session.load(Category.class, id); 
      }catch(Exception e) { 
       System.out.println("getAllCategory "+ e); 
      }finally{ 
       if(session != null && session.isOpen()) 
        session.close(); 
      } 
      return cat; 
     } 

//and below few methods that use it the some way session 
     } 

и этот сервлет принять результаты indexuser

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

try{ 
      Collection allcategory = Factory.getInstance().getCatDAO().getAllCategory(); 
request.setAttribute("allcategory", allcategory); 
request.getRequestDispatcher("/index.jsp").forward(request, response); 
     } catch(Exception e) { 
      System.out.println(e); 
     } finally{ 
      if(session!=null && session.isOpen()) 
       session.close(); 
     } 

ответ

3

Основным контрактом является создание экземпляров сеанса. Обычно приложение имеет один экземпляр SessionFactory, а запросы клиентов, обслуживающие клиентские запросы, получают экземпляры сеанса с этой фабрики.

Внутреннее состояние SessionFactory является неизменным. После его создания устанавливается это внутреннее состояние. Это внутреннее состояние включает все метаданные об объектно-реляционном сопоставлении.

В основном сеанс используется для физического подключения к базе данных. Поэтому, выполняя какие-либо операции с БД, он сначала откроет сеанс, используя sessionFactory, а затем сеанс выполняет физическое соединение с базой данных, а затем выполнит вашу операцию и после выполнения операции вы можете закрыть его.

Сессия - легкий вес.

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