Я работаю над приложением базы данных для клиента. Старый код приложения совершенно несовместим с тем, как он обращается к базе данных; в некоторых методах он использует объекты Hibernate, в других он напрямую создает подключения JDBC и использует чистый SQL, в некоторых он создает соединения Hibernate и использует их для соединения JDBC. В любом случае мы собираемся перестроить много кода, чтобы сделать его согласованным. Наш клиент услышал о JPA и попросил нас использовать его, потому что клиент полагает, что он будет иметь преимущество в производительности.Когда EntityManager JPA дает преимущества производительности по сравнению с простым JDBC?
Проблема в том, что мое понимание преимуществ производительности от JPA заключается в том, что большая польза от EntityManager от JPA, поскольку она позволяет вам сохранять объекты в памяти между вызовами базы данных. Однако приложение, над которым мы работаем, не будет единственным приложением, обращающимся к базе данных, и будет работать в нескольких экземплярах в нескольких местах. Кроме того, EntityManagers aren't thread-safe, чтобы мы не смогли увидеть измененные данные в другой части того же приложения. Таким образом, похоже, что нам нужно будет получить новый EntityManager из EntityManagerFactory в каждом методе и закрыть его, когда метод будет завершен. Таким образом, мы не смогли бы долго сохранять объекты в памяти, потому что другим приложениям нужны данные, которые мы меняем. & измените нужные нам данные.
Текущий код - такой беспорядок, что переход к JPA в любом случае даст большие преимущества в ремонтопригодности и согласованности. Однако, если это не даст преимуществ производительности, мы должны сообщить клиенту как можно скорее, чтобы они не были разочарованы. Существуют ли другие способы, с помощью которых JPA обеспечивает преимущества в производительности, помимо очевидного, связанного с контекстами Persistance?
Я проверил другие вопросы в StackOverflow, но те, которые я нашел, говорят об изменениях в больших партиях (example here). Наш клиент хочет, чтобы изменения, сделанные одним приложением, были видимыми для других приложений как можно скорее, поэтому наше приложение сделает несколько небольших изменений, а не периодические изменения партии.
спасибо.
Пожалуйста, обратите внимание, что любая форма исполнения может быть косвенно со ссылкой на (скорости выполнения, поддержание развития легкости, кода качество, переносимость) НЕ являются свойствами JPA. Они, как правило, полностью контролируются разработчиками; он очень зависит от ваших навыков инженера и ваших возможностей по разработке правильных архитектур программного обеспечения, если он действительно сильно поможет или сильно помешает вам. Если вы планируете использовать JPA для -всего, например, базы данных, вы уже находитесь на шаткой почве. Сохраненные процедуры и простой JDBC все еще имеют свое место. – Gimby
Поскольку другие приложения должны читать базу данных, я не ожидаю, что вы получите большую часть повышения производительности, так как ваш JPA-код будет [flush] (http://docs.oracle.com/javaee/6/ api/javax/persistence/EntityManager.html # flush% 28% 29) после большинства операций. Однако большой выигрыш будет во время разработки. Поддержание кода JPA намного проще, чем поддержка явного JDBC. Возможно, вы даже сможете использовать [ограничения проверки] (http://docs.oracle.com/javaee/6/api/javax/validation/constraints/package-summary.html). – VGR