Хранимые процедуры в основном потеряли популярность (вы можете прочитать некоторые идеи о том, почему здесь: http://www.codinghorror.com/blog/2004/10/who-needs-stored-procedures-anyways.html).
В целом, если у вас нет проблем с производительностью или вы работаете с устаревшими системами, рекомендуется не использовать хранимые процедуры.
Решения объектно-реляционного сопоставления, такие как JPA, в настоящее время являются отраслевым стандартом, главным образом потому, что они позволяют писать меньше и проще в обслуживании, чем другие методы (например, использование шаблона DAO и JDBC напрямую).
Например, рассмотрите возможность добавления нового столбца в таблицу, которую вы используете CRUD (Создать, получить, обновить, удалить) с помощью:
- Используя JPA, вы добавляете столбец в таблицу и добавляете свойство в класс с аннотацией, вот и все.
- В случае хранимых процедур вам также необходимо добавить параметр в процедуры для обновления или создания новой сущности, вам нужно будет добавить столбец в оператор вставки или обновления внутри процедуры, в некоторых случаях вы ' Вам нужно будет добавить столбец к предложению select внутри процедуры.
Что касается использования хранимых процедур, JPA не поддерживает хранимые процедуры как таковые, но есть два способа обойти это:
- Некоторые реализации JPA (такие как EclipseLink или Hibernate) поддерживают хранимые процедуры, и вы можете напрямую использовать их реализацию, вам нужно будет увидеть, какую реализацию вы используете.
Вы можете использовать функцию «нативный запрос», которая позволяет писать SQL на языке запросов к собственной базе данных, например, для MySQL вы можете написать что-то вроде этого:
Query query = entityManager.createNativeQuery("{ CALL procedure(?) }");
query.setParameter(1, parameterName);
Вам также нужно помнить, что процедура должна возвращать набор результатов, и вы не можете использовать параметры.