Форум программистов, компьютерный форум, киберфорум
Java: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
10 / 7 / 4
Регистрация: 08.12.2013
Сообщений: 165

Подскажите, как правильно освобождать сессию в Hibernate?

03.06.2017, 16:50. Показов 1412. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.

есть несколько контроллеров, которые дергают данные из базы.
Примерно после 50 - 100 запросов получаю такую беду в консоли:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source rejected establishment of connection,  message from server: "Too many connections"
    at sun.reflect.GeneratedConstructorAccessor166.newInstance(Unknown Source) ~[na:na]
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.8.0_131]
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[na:1.8.0_131]
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:404) ~[mysql-connector-java-5.1.39.jar:5.1.39]
    at com.mysql.jdbc.Util.getInstance(Util.java:387) ~[mysql-connector-java-5.1.39.jar:5.1.39]
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:917) ~[mysql-connector-java-5.1.39.jar:5.1.39]
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:896) ~[mysql-connector-java-5.1.39.jar:5.1.39]
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:885) ~[mysql-connector-java-5.1.39.jar:5.1.39]
    at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1042) ~[mysql-connector-java-5.1.39.jar:5.1.39]
    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2253) ~[mysql-connector-java-5.1.39.jar:5.1.39]
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2284) ~[mysql-connector-java-5.1.39.jar:5.1.39]
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2083) ~[mysql-connector-java-5.1.39.jar:5.1.39]
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:806) ~[mysql-connector-java-5.1.39.jar:5.1.39]
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47) ~[mysql-connector-java-5.1.39.jar:5.1.39]
    at sun.reflect.GeneratedConstructorAccessor82.newInstance(Unknown Source) ~[na:na]
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.8.0_131]
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[na:1.8.0_131]
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:404) ~[mysql-connector-java-5.1.39.jar:5.1.39]
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:410) ~[mysql-connector-java-5.1.39.jar:5.1.39]
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:328) ~[mysql-connector-java-5.1.39.jar:5.1.39]
    at org.hibernate.engine.jdbc.connections.internal.DriverConnectionCreator.makeConnection(DriverConnectionCreator.java:38) ~[hibernate-core-5.2.9.Final.jar:5.2.9.Final]


Самое интересное, что я использую try - catch с ресурсами. До этого закрывал соединение в finally, эффект был тот же.

Java
1
2
3
try  (Session session = HibernateUtil.getSessionFactory().openSession()){
// DB magick
}
что я делаю не так -- ума не приложу.
Подскажите, как это исправить?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.06.2017, 16:50
Ответы с готовыми решениями:

Как правильно освобождать мютексы
Здравствуйте, у меня вопрос, есть разница в том как освобождать мютексы?? пример захватываем мютекс А, потом захватываем В ......

Как правильно освобождать кучу?
допустим, создаю массив байт: BYTE* data = (BYTE*)HeapAlloc(GetProcessHeap(), NULL, 16); ... // заполнение и использование...

Как правильно освобождать память
Подскажите пожалуйста ,где память чистить в таком случае?Или как это правильно сделать. char *funk(.....){ char *name = new...

7
 Аватар для Borsche
183 / 110 / 44
Регистрация: 03.07.2016
Сообщений: 496
03.06.2017, 19:55
Вы в спринге работаете?
0
10 / 7 / 4
Регистрация: 08.12.2013
Сообщений: 165
03.06.2017, 23:49  [ТС]
Borsche, да, именно в нем
0
 Аватар для Borsche
183 / 110 / 44
Регистрация: 03.07.2016
Сообщений: 496
04.06.2017, 08:46
Тогда вопрос к вам такой. Какого буя вы вручную управляете подключениями??? Предоставте это спрингу.
0
10 / 7 / 4
Регистрация: 08.12.2013
Сообщений: 165
04.06.2017, 10:18  [ТС]
Borsche, мммм
а можно, если не трудно, ссылочку на какой-нибудь тутор?

именно такой, в котором правильно используется хибернейт вместе со спрингом

Добавлено через 4 минуты
будет правильным, запросы к бд выносить в сервисы, верно?

https://habrahabr.ru/post/248541/
0
Эксперт Java
378 / 370 / 114
Регистрация: 30.06.2010
Сообщений: 1,445
04.06.2017, 12:22
Читайте официальную доку, там все это есть. Ищите про аннотацию @Transactional
0
 Аватар для Borsche
183 / 110 / 44
Регистрация: 03.07.2016
Сообщений: 496
04.06.2017, 16:35
будет правильным, запросы к бд выносить в сервисы, верно?
Это уже вопрос к архитектуре вашего приложения. Я вам в личку кину свой небольшой проект и просмотрите.
0
Эксперт Java
378 / 370 / 114
Регистрация: 30.06.2010
Сообщений: 1,445
04.06.2017, 17:40
Хм, пропустил про запросы вопрос. Забудьте про ручное управление session manager'ами, entity manager'ами, и уж тем более никаких запросов в сервисах, если используете querydsl, то предикаты еще можно строить в сервисах, но и то в доменных. Все запросы в слое dao/repository. Вообще spring data jpa вам в руки
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.06.2017, 17:40
Помогаю со студенческими работами здесь

Как правильно освобождать память от вектора?
ПОжалуйста если можно пример для одномерного и двумерного. циклом или метод есть какой то?

Как правильно освобождать память в динамических структурах
Использую деструктор для освобождения памяти от указателя на начало списка. struct Node { int x; Node *Next; }; class...

Как правильно освобождать память от динамического массива
Изучаю освобождение памяти. (тестю на XE7) У меня есть динамический массив Button'ов, объявленный в глобальных переменных (не только...

Как и когда правильно освобождать динамически выделенную память?
Доброго времени суток! Задалась вопросом, заданным в заголовке темы &quot;Как и когда правильно освобождать динамически выделенную...

Dll на C++ кушает память, как правильно удалять и освобождать память?
Добрый день, совсем мало опыта в программировании на C++, помогите пожалуйста знатоки С++. Есть Dll, типа wrapper для библиотеки...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru