JPA: Каков эффективный способ объединения отдельных объектов? - PullRequest
4 голосов
/ 02 февраля 2011

Технологии: Spring, Hibernate, JSR-303, JQuery
Платформа: Windows

Я пытаюсь реализовать простой вариант использования обновления.См. Ссылка на исходный код службы / службы / контроллера

Class2 содержит много свойств, включая Class1.Class2Controller использует Spring для создания нового объекта Class2 и привязки параметров объекта HttpRequest к Class2.Затем он вызывает Сервис, который, в свою очередь, вызывает DAO.В DAO, каков наиболее эффективный способ обновления этого нового объекта Class2 до базы данных?

Опция 1:

  • В настоящее время в DAO я извлекаю объект Class2 из базы данных.

    Class2 class2Persisted = em.find(Class2.class, class2Request.getId());

  • Обновить полученный объект со свойствами из объекта запроса и зафиксировать

    tx.begin();
    class2Persisted.setClass1(class2Request.getClass1());
    em.merge(class2Request);
    tx.commit();
    
  • Выше ятолько обновление одного свойства с помощью setClass1.Но в Class2 есть много свойств, которые нужно будет обновить.Есть ли другой эффективный способ слияния class2Persisted с class2Request на уровне объекта, а не на каждом уровне свойств?

Вариант 2

  • ПустьClass2Controller извлекает объект class2Persisted и запрашивает Spring для привязки параметров.

  • Я понял, что вариант 2 не является жизнеспособным вариантом.Пожалуйста, смотрите другую проблему ссылка , с которой я столкнулся ранее.Hibernate попытается загрузить связанные объекты и выбросит EntityNotFoundException без моего пользовательского ограничения @IdMustExist, получая возможность проверки.

Пожалуйста, предложите, если у вас есть какие-либо другие предложения.

1 Ответ

0 голосов
/ 09 февраля 2012

Вы должны использовать, dynamic-update = true для обновления сущности / таблицы, и она высоко оптимизирована и будет обновлять только столбцы, значение которых изменено и не включает в себя все поля.управляемые аннотациями pojo @ org.hibernate.annotations.Entity (dynamicUpdate = true)

и

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