powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / hibernate: вопрос
7 сообщений из 7, страница 1 из 1
hibernate: вопрос
    #38621931
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть простенький хибернейт проектик, разъясните почему после выборки по 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
hibernate: вопрос
    #38622506
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Следует использовать get() вместо load(), так как load() может вернуть неинициализированный прокси (ленивая инициализация). Пока сессия открыта - ничего страшного, при первом требовании (доступе к полю, не входящему в ключ) прокси инициализируется, но в данном примере сессия немедленно закрывается, отсюда и ошибка. get() возвращает либо инициализированный инстанс, либо null если объект не найден
...
Рейтинг: 0 / 0
hibernate: вопрос
    #38622518
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rema174,

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

А с чем связано то, что процесс не завершается после получения данных? Это видно в эклипсе.
...
Рейтинг: 0 / 0
hibernate: вопрос
    #38624185
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rema174А с чем связано то, что процесс не завершается после получения данных? Это видно в эклипсе.
Какой ещё "процесс"? И почему он должен завершится именно после получения данных?
...
Рейтинг: 0 / 0
hibernate: вопрос
    #38624197
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
7 сообщений из 7, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / hibernate: вопрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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