я использую апатридов транзакционных услуг (смысл, я открываю новую сессию и транзакцию для каждого вызова), как это:Повторное прикрепление и манипулируя отдельностоящий экземпляр в Hibernate (JPA)
@Transactional
void someService(Object o) {
Object newO = entityManager.merge(o);
newO.getChildren().add(something);
}
объекта О, который я прохожу к услуга - отдельный объект. Проблема с merge(object)
заключается в том, что он возвращает новый экземпляр, чтобы манипулировать, вместо того чтобы сделать сам аргумент постоянным. Поэтому любые изменения, которые я делаю на постоянном объекте, не происходят с исходным объектом в памяти.
Я мог бы, конечно, переписать все мои местные ссылки, но я надеюсь, что есть лучшее решение.
Есть ли способ сделать мой локальный экземпляр управляемым, вместо получения нового экземпляра?
Я пробовал refresh(object)
и update(object)
, но у меня есть исключения, потому что ассоциации объекта все еще отсоединены.
Когда я комментирую ассоциации с @Cascade(value=CascadeType.save-update)
, он отлично работает, но не вызывает проблем с производительностью, когда у меня много ассоциаций OneToMany или ManyToMany?
+1 thx для ссылки. по какой-то причине это не работает должным образом для меня, хотя. Я просмотрю и опубликую, как только я дойду до конца. –
Я понял. Я должен был упомянуть, что я манипулирую ассоциациями, когда объект отсоединен. все манипулируемые ассоциации, похоже, нуждаются в каскаде = обновление обновления-обновления или он жалуется, что они не подключены во время вызова обновления. –
Хорошо! Полезно знать! – Paolo