Mam obiekt domeny, który przechowuje wyniki obliczeń na podstawie parametrów, które są właściwościami tego samego obiektu domeny. Chciałbym się upewnić, że wszelkie parametry czasu zostaną zmienione przez użytkownika, przeliczą się i zostaną poprawnie zapisane w bazie danych.Modyfikowanie obiektu w AfterInsert/AfterUpdate
Próbuję to zrobić za pomocą funkcji afterInsert (w celu upewnienia się, że obliczenia są poprawne w pierwszej kolejności) i afterUpdate.
Jednak, ponieważ moje obliczenia próbują zmodyfikować sam obiekt, nie działa - rzucanie różnych wyjątków w trybie hibernacji.
Próbowałem umieścić kod AfterUpdate w transakcji, ale to nie pomogło. Obawiam się, że mam tutaj do czynienia z problemami zależności cyklicznej.
Wyjątkiem Dostaję teraz jest:
org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [esc.scorecard.PropertyScorecard#27]
Są wydarzenia Gorm przeznaczone do prostszych przypadków użycia? Kusi mnie do wniosku, że modyfikacja obiektu, w którym jesteście w trakcie oszczędzania, nie jest drogą do zrobienia.
co twoja obejście tego problemu. Stoję również w obliczu tego dylematu. * .withNewSession * nie działa dla afterInsert. Nie mogę opróżnić obiektu ani go po prostu zapisać (cóż, mogę .save(), ale wydaje się, że obliczenia, które zrobiłem wewnątrz funkcji afterInsert nie są zachowywane w bazie danych, jeśli po prostu użyję .save()). dzięki! W każdym razie chcę tylko zachować obiekt User w mojej klasie domeny (np. Message), który ją utworzył. Ponieważ dziennik inspekcji zapisuje tylko długi odnośnik (np. Utworzony przez), nie mogę ostatecznie manipulować klasą domeny Wiadomość i ostatecznie odwołać się do jej attrib –