2011-01-07 7 views
5

Mam odwzorowany obiekt, który ma właściwość enum. Dzięki lokowaniu w pliku dziennika, za każdym razem, gdy uruchomię instrukcję select na takiej encji, wynikiem jest natychmiast następująca aktualizacja. Na przykład jeśli mój zestaw wyników zawiera 100 rekordów, to mam:Używanie funkcji wyliczeń w trybie hibernacji powoduje, że opcja select, a następnie instrukcja aktualizacji

[INFO org... select...] 
[INFO org... update... where id=?] 
[INFO org... update... where id=?] 

.... powtarzane 100 razy

Gdybym oznaczyć nieruchomość jako aktualizację = false problem zniknie. Wyliczenie jest przypisane za pomocą klasy konwertera enum, którą skopiowałem ze znanej książki. Więc nie wiem, czy po prostu skopiować i wkleić kod. Oto w jaki sposób jest zadeklarowany w pliku hbm.

<typedef class="mypackage.HbnEnumConverter" name="the_type"> 
    <param name="enumClassname">mypackage.TheType</param> 
</typedef> 

Czy możesz wskazać kierunek, w którym należy to zbadać? Poza tym, jakie są konsekwencje posiadania aktualizacji = false w polu hibernacji?

dzięki

+0

O ile rozumiem, w "znanej książce" nie ma metod porządkowych typu użytkownika, czy jesteś pewien, że poprawnie je zaimplementowałeś (szczególnie 'equals (Object, Object)')? – axtavt

Odpowiedz

2

Hibernate wygeneruje aktualizacji, jeśli obiekt oznaczony jako brudne.

Zobacz dzienniki, aby sprawdzić, czy hibernacja zaznacza obiekt jako brudny.

jeśli masz coś podobnego do poniższego.

class Entity{ 

    public YourEnum getEnum() { 
    return yourEnum==null?YourEnum.SOME_VALUE:....; 
    } 
} 

A może w swojej metodzie Enum.equals wracasz zapewne równa false (null, null) przypadek?

Metoda equals powinna zwracać wartość true, jeśli porównywane obiekty są takie same i fałszywe, ponieważ użycie metody hibernate równa się metodzie decydowania, czy obiekt jest brudny, czy nie.

+0

czy możesz podać mi więcej szczegółów na temat równości (zero, zero)? – Leonardo

+0

Nie jest to przypadek szczególny, tylko przypadek, który jest bardziej podatny na błędy. Metoda equals powinna zwracać poprawny wynik, aby obiekt mógł zostać poprawnie oznaczony jako zabrudzony. – fmucar

+0

Metoda equals powinna zwracać wartość true, jeśli porównywane obiekty są takie same i fałszywe, ponieważ użycie metody hibernate równa się metodzie decydującej o tym, czy obiekt jest brudny, czy nie. – fmucar

Powiązane problemy