Настройка производительности Hibernate - PullRequest
1 голос
/ 07 марта 2012

У меня около 1000 разных идентификаторов, для которых мне нужно выполнить приведенный ниже запрос hibernate столько раз.Основываясь на извлеченных записях (запись не обязательно должна присутствовать), я делаю небольшую обработку, прежде чем вводить ее в другую таблицу.

Проблема в том, что весь процесс извлечения записей занимает около 20-25 секунд.,Это нормально?Можно ли изменить запрос, чтобы сократить время?

(приведенный ниже запрос гибернации будет выполняться для каждого идентификатора)

String query = "select emp from Employee emp where emp.id = '"+id"' and emp.status.statusCd = 'A'";

Примечание: Employee - это таблица, содержащая около 30 столбцов.status_cd и id - это VARCHAR.

1 Ответ

4 голосов
/ 07 марта 2012

Прежде всего, никогда не используйте конкатенацию строк для установки переменных полей в SQL.

String queryString = "select emp from Employee emp where emp.id = :id and emp.status.statusCd = 'A'";
Query query = Session.createQuery(queryString);
query.setInteger("id", 168);

Во-вторых, вы можете попытаться получить все целевые записи одним запросом, docs :

String queryString = "select emp from Employee emp where emp.id in (:id) and emp.status.statusCd = 'A'";
Query query = Session.createQuery(queryString);
Collection<Integer> idList = new ArrayList<Integer>();
query.setParameterList("id", idList);

Затем вы будете перебирать результаты этого запроса и обрабатывать каждую запись так, как вы обрабатывали их ранее.

В-третьих, если вы выполняете дополнительный SQL при обработке каждой отдельной записи, то выследует также собрать их и выполнить их в партии .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...