У меня есть простое приложение, которое выбирает некоторые данные из ОДНОЙ таблицы в БД (MySQL 5.1) через Hibernate и отображает содержимое. Основным используемым фреймворком является Spring 3.0. Запрос выполняется правильно в @Transactional (только для чтения) (+ второй уровень кэша).
Проблемы возникают при выполнении нескольких параллельных тестов с запросами 20/30 на одну и ту же страницу. Некоторые запросы страниц возвращают 500 вместо 200. Я полагаю, это связано с тем, что @Transactional не управляет многопоточным доступом (пожалуйста, исправьте меня, если я ошибаюсь).
В контроллере у меня что-то вроде этого:
List<String> names = usersService.getUserNames(); // this executes query in @Transactional env
doSomething(names);
В журналах указано, что doSomething создает некоторое исключение NullPointerException, так как в переданном списке нет данных.
Есть ли способ реализовать диспетчер доступа с несколькими потоками в Spring + Hibernate, который управляет параллельными запросами к БД?