Jest to sytuacja bardzo często spotykana, więc spodziewam się dobrego rozwiązania. Zasadniczo musimy zaktualizować liczniki w naszych tabelach. Jako przykład odwiedzenia strony internetowej:Aktualizacja liczników przez Hibernate
Web_Page
--------
Id
Url
Visit_Count
Więc w hibernacji, możemy mieć ten kod:
webPage.setVisitCount(webPage.getVisitCount()+1);
Problemem jest wczytuje w mysql domyślnie nie zwracają uwagi do transakcji. Tak więc bardzo traffickowana strona internetowa będzie miała niedokładne wyniki.
Sposób jestem przyzwyczajony do robienia tego typu rzeczy jest po prostu zadzwonić:
update Web_Page set Visit_Count=Visit_Count+1 where Id=12345;
Chyba moje pytanie, jak to zrobić w hibernacji? A po drugie, jak mogę zrobić taką aktualizację w Hibernate, która jest nieco bardziej złożona?
update Web_Page wp set wp.Visit_Count=(select stats.Visits from Statistics stats where stats.Web_Page_Id=wp.Id) + 1 where Id=12345;
Dziękuję Pascal. Nie wiedziałem, że mogę robić aktualizacje w HQL. Wygląda łatwo. Ale jeśli chodzi o mój bardziej złożony przykład, czy padłby ofiarą tego samego problemu SELECT, nie zwracając uwagi na transakcje? Jak sugerujesz, że sobie z tym poradzę? –