возможно неявно повторно присоединить все вложенные доменные объекты к сеансу Hibernate в Grails? - PullRequest
2 голосов
/ 18 января 2012

Я заметил, что при получении объекта Domain из HttpSession и присоединении его обратно к сеансу гибернации он не присоединяет какие-либо классы Domain, являющиеся свойствами.

Например, предполагая Foo и Barоба являются классами домена, и Foo является отдельным классом домена, у которого есть свойство Bar, которое может завершиться ошибкой:

myFoo.attach()
println myFoo.bar.someBarProperty //LazyInitializationException

Но это успешно

myFoo.attach()
myFoo.bar.attach()
println myFoo.bar.someBarProperty //Ok

Есть ли myFoo.attachRecursively () илипохоже что бы избежать вышеописанного?Для простого случая это не имеет большого значения, но для более крупного графа объектов это может быть грязно.

Примечание. Я понимаю, что использование HttpSession для этой цели не является лучшей практикой, и я использую это только в оченьв особых случаях через область видимости флеш-памяти, поэтому, пожалуйста, избегайте "Просто передайте идентификатор и перезагрузите его", напечатайте ответы

1 Ответ

2 голосов
/ 02 декабря 2014

Я хотел бы предложить вам использовать "myFoo.merge ()" вместо "myFoo.attach ()" , потому что когда один и тот же объект связан с другим сеансом в этом раз вы получаете исключение, как:

другой объект с тем же значением идентификатора уже был связан с ошибкой сеанса [duplicate]

в то время как вы используете метод merge () в то время, если объект является постоянным, тогда он использовал этот объект, и если объект не является постоянным или не присоединен в то время, он создает новое постоянство для этого конкретного объекта и использует его.

сливаться

...