2011-01-07 5 views
5

Ich habe eine zugeordnete Entität, die eine Enum-Eigenschaft hat. Wenn ich eine Log-Datei suche, führe ich jedes Mal, wenn ich eine select-Anweisung für eine solche Entität ausfühle, zu einer unmittelbar folgenden Aktualisierung. Zum Beispiel, wenn mein Ergebnismenge enthält 100 Datensätze, dann habe ich:Die Verwendung von Enum im Ruhezustand führt zur Auswahl, gefolgt von einer Aktualisierungsanweisung.

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

.... 100 mal wiederholt

Wenn ich die Eigenschaft als Update = false das Problem verschwinden markieren. Die Enumeration wird durch eine Enumkonverterklasse zugewiesen, die ich aus einem bekannten Buch kopiert habe. Also ich weiß nicht, ob ich nur den Code kopieren und einfügen. Hier ist, wie in der hbm-Datei deklariert wird.

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

Können Sie eine Richtung darauf hinweisen, dies zu untersuchen? Was sind die Konsequenzen davon, dass update = false im Hibernate-Feld ist?

dank

+0

Soweit ich verstehe, in der "bekannten Buch" Housekeeping-Methoden des Usertype sind verpasst, sind Sie sicher, dass Sie sie richtig implementiert (insbesondere 'equals (Object, Object)')? – axtavt

Antwort

2

Hibernate wird ein Update, wenn Ihr Objekt als schmutzig markiert erzeugen.

Sehen Sie in den Protokollen nach, ob Hibernate Ihr Objekt als fehlerhaft markiert.

wenn Sie etwas ähnliches wie unten haben.

class Entity{ 

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

Oder vielleicht in Ihrer Enum.equals Methode, die Sie wahrscheinlich gleich für (null, null) Fall falsch zurückkommen?

Die equals-Methode sollte true zurückgeben, wenn die verglichenen Objekte identisch sind und false, andernfalls wie der hibernate equals-Methode verwendet, um zu entscheiden, ob das Objekt schmutzig ist oder nicht.

+0

Kannst du mir bitte mehr über das Problem mit Gleichen (null, null) erzählen? – Leonardo

+0

Es ist kein Sonderfall, nur der Fall ist fehleranfälliger. Die equals-Methode sollte das korrekte Ergebnis zurückgeben, damit das Objekt korrekt dreckig markiert werden kann. – fmucar

+0

Die equals-Methode sollte true zurückgeben, wenn die verglichenen Objekte gleich sind und false, andernfalls verwendet der hibernate die equals-Methode, um zu entscheiden, ob das Objekt schmutzig ist oder nicht. – fmucar

Verwandte Themen