Использование каскадов по выбору в Hibernate / JPA - PullRequest
4 голосов
/ 22 марта 2011

Моя проблема довольно проста, но в целом очень важна - я думаю.Я провел исследование в течение нескольких часов, но не нашел ничего полезного.

Введение:
У меня есть сущность с именем Employee, которая является центральным классом моей системы (скажем, ее Управление персоналом).Написав центральное, я имею в виду, что он имеет много связей с другими объектами.В нем есть свойства OneToOne, OneToMany и ManyToOne.Проблема:
В некоторых случаях мне приходится обновлять эту сущность (она также имеет базовые свойства, такие как 'String name;' и т. Д.) - после того, как она была изменена в одном контексте EntityManager (Hibernate Session) и должна быть обновлена ​​в другом,Конечно, я могу использовать для этого:

entityManager.refreash(employee);

, но ... он также будет обновляться как "сто" связанных объектов (упомянуто: 1-1, -1, 1- отношения), потому что эти отношения имеют параметр аннотации Cascade.All или Cascade.REFREASH для них.Что не нужно в этой ситуации - я использую только сущность Employee в этом контексте.А что НЕ ХОТИТЕ, потому что это снизит производительность и даже локально займет около 0,5 с ...
Вопрос:
Есть ли способ обновить сущность, по желанию "отключив" каскады ее свойств.Или, может быть: есть ли способ обновить только определенные свойства сущности с помощью Hibernate / JPA ??

Я действительно не хочу, чтобы эти 20 или более длинные SQL-запросы запускались Hibernate, когда я обновляю свою сущность в этихситуации, но в других ситуациях это требуется.

Другими словами, я бы сказал, что мне нужна опция, например "renceCascadesOnRefresh = true / false ", которую можно установить перед обновлением.

Любые другие идеи?

Любая помощь приветствуется,

Педро

1 Ответ

1 голос
/ 22 марта 2011
  • Во-первых, если у вас есть только два или три поля для обновления, используйте критерии api.

  • Во-вторых, Каскад не очень полезен в абсолютном контексте -лучше разрешить некоторые из зависимостей вручную.

  • В-третьих, используйте FetchType.LAZY для коллекций!

PS И НЕТ, вы можетене используйте каскад вручную, так как эти аннотации используются один раз при создании схемы БД.

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