2015-07-06 2 views
0

В одном приложении, над которым я работаю, я обнаружил, что объекты JPA, которые были изменены, не были ранее загружены, я имею в виду;Правильный способ сохранения существующей сущности JPA в базе данных

Вместо того, чтобы делать так: (! И работ)

getEntityManager().find(Enterprise.class, idEnterprise); 
//Some modifying operations 

Они делают так:

Enterprise obj = new Enterprise (IdEnterprise); 
//Some modifying operations 
getEntityManager().persist(obj); 

Это последнее решение оленья кожа нагрузки из базы данных объекта и изменяет объект правильно.

  1. Как это возможно?
  2. Хорошая практика? По крайней мере, вы избегаете запроса, который загружается из базы данных, не так ли?

Благодаря

ответ

0

Это зависит. Если вы пишете код из класса контроллера (или любого кода приложения), вы не должны беспокоиться о материалах jpa, поэтому второй подход является плохим и избыточным.

Если вы работаете в инфраструктурном коде, возможно, вы можете вручную сохранить сущности для оптимизации производительности или просто потому, что хотите, чтобы данные сохранялись, даже если транзакция завершилась с ошибкой.

Я сильно подозреваю, что второй бит кода - это кто-то, создающий сущность с нуля, но смешивающий приложение, домен и код инфраструктуры в том же методе: крайне злая практика. (Очень злой, отец дэта злой, никогда не делай этого)

+0

- Почему второй подход плох и избыточен? - Второй способ избежать одного запроса, не так ли? Фактически, согласно этой теме (http://stackoverflow.com/questions/12828919/how-do-i-save-anity-with-foreign-key-without-loading-the-related-entity-in- j), когда вы хотите сохранить объект и у него есть другие объекты (внешние ключи), нет необходимости загружать их из базы данных, если вы не хотите их изменять, тогда вы можете использовать «em.getReference (Account.class, accountId) « – user3254515

+0

Как я уже сказал, это плохая практика (потому что вы смешиваете разные проблемы в одном и том же методе), но вы можете это сделать, если вам нужно оптимизировать установленное приложение, и вы ограничиваете его логикой базы данных. – gurghet

Смежные вопросы