Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / hibernate: вопрос / 7 сообщений из 7, страница 1 из 1
22.04.2014, 17:22
    #38621931
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
hibernate: вопрос
Есть простенький хибернейт проектик, разъясните почему после выборки по id появляется ошибка при взятии поля из стьюдента?
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
public Student getStudentById(Long id) throws SQLException {
            Session session = null;
            Student stud = null;
            try {
                session = HibernateUtil.getSessionFactory().openSession();
                stud = (Student) session.load(Student.class, id);
            } catch (Exception e) {
                JOptionPane.showMessageDialog(null, e.getMessage(), "Ошибка I/O", JOptionPane.OK_OPTION);
            } finally {
                if (session != null && session.isOpen()) {
                    session.close();
                }
            }
            return stud;
      }

      public List<Student> getAllStudents() throws SQLException {
            Session session = null;
            List<Student> studs = new ArrayList<Student>();
            try {
                session = HibernateUtil.getSessionFactory().openSession();
                studs = session.createCriteria(Student.class).list();
            } catch (Exception e) {
                JOptionPane.showMessageDialog(null, e.getMessage(), "Ошибка I/O", JOptionPane.OK_OPTION);
            } finally {
                if (session != null && session.isOpen()) {
                    session.close();
                }
            }
            return studs;
      }



после след-го ошибки нет
Код: java
1.
2.
3.
4.
5.
List<Student> studs = Factory.getInstance().getStudentDAO().getAllStudents();
        System.out.println("========Все студенты=========");
        for(int i = 0; i < studs.size(); ++i) {
                System.out.println("Имя студента : " + studs.get(i).getName();             
        } 


но после этого есть. говорит no session на последней строке...
Код: java
1.
2.
Student st = Factory.getInstance().getStudentDAO().getStudentById(new Long(1));
System.out.println("Имя студента : " + st.getName());   
...
Рейтинг: 0 / 0
23.04.2014, 09:41
    #38622506
ivanra
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
hibernate: вопрос
Следует использовать get() вместо load(), так как load() может вернуть неинициализированный прокси (ленивая инициализация). Пока сессия открыта - ничего страшного, при первом требовании (доступе к полю, не входящему в ключ) прокси инициализируется, но в данном примере сессия немедленно закрывается, отсюда и ошибка. get() возвращает либо инициализированный инстанс, либо null если объект не найден
...
Рейтинг: 0 / 0
23.04.2014, 09:54
    #38622518
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
hibernate: вопрос
rema174,

А по-хорошему стоило scope сессии привязать к бизнес-транзакции. А не открывать\закрывать на каждую операцию. Сессия это кэш первого уровня. Вы лишаетесь массы фич Hibernate используя её таким образом как в приведенном выше коде.
...
Рейтинг: 0 / 0
23.04.2014, 09:54
    #38622520
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
hibernate: вопрос
...
Рейтинг: 0 / 0
24.04.2014, 11:10
    #38624178
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
hibernate: вопрос
Get там что нужно.

А с чем связано то, что процесс не завершается после получения данных? Это видно в эклипсе.
...
Рейтинг: 0 / 0
24.04.2014, 11:14
    #38624185
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
hibernate: вопрос
rema174А с чем связано то, что процесс не завершается после получения данных? Это видно в эклипсе.
Какой ещё "процесс"? И почему он должен завершится именно после получения данных?
...
Рейтинг: 0 / 0
24.04.2014, 11:20
    #38624197
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
hibernate: вопрос
Blazkowicz,
ну как, после того как из main выполняется это
Код: java
1.
2.
3.
4.
5.
List<Student> studs = Factory.getInstance().getStudentDAO().getAllStudents();
        System.out.println("========Все студенты=========");
        for(int i = 0; i < studs.size(); ++i) {
                System.out.println("Имя студента : " + studs.get(i).getName();             
        } 


в консоли видно, что программа все еще активна, т.е. какой-то процесс не завершился.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / hibernate: вопрос / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]