Frage

Ich bin mit JPA mit OpenJPA Implementierung unter, auf einem Geronimo-Anwendungsserver. Ich bin auch mit MySQL-Datenbank. Ich habe ein Problem mit dem Objekt mit Nullable-Datum Eigenschaft zu aktualisieren. Wenn ich zu verschmelzen Einheit mit Datum-Eigenschaft auf null bin versucht, wird keine SQL-Update-Skript erzeugt (oder wenn andere Felder geändert werden, wird sql Update-Skript generiert, aber Datumsfeld aus ist ommited). Wenn Datumsfeld zu einem anderen nicht Null-Wert gesetzt ist, wird Update-Skript ordnungsgemäß generiert.

Hat jemand Problem wie das?

War es hilfreich?

Lösung

OpenJPA macht bestimmte Annahmen, wenn Sie losgelöst haben (und vermutlich serialisiert) eine Einheit und dann wieder zusammenführen in.

Es ist in der Regel die Serialisierung, dass Tritte in dieser Art von Problem - wenn das Unternehmen serialisiert OpenJPA verliert seine State, welche Spuren die Felder geladen wurden. Als Ergebnis, wenn Sie verschmelzen mit einem Nullwert an das Unternehmen zurück OpenJPA nicht sicher ist, dass das Feld immer geladen wurde und denkt, hat es sich nicht geändert.

Es gibt ein paar Optionen, dies zu beheben:

Sie können OpenJPA konfigurieren, dass ein serializable State verwenden - und es wird verfolgen, welche Felder Sie geladen haben. Um dies zu tun, die folgende Eigenschaft auf persistence.xml hinzuzufügen.

<property name="openjpa.DetachState" value="loaded(DetachedStateField=true)"/>

Oder sagen OpenJPA eine Reihe von Feldern zu laden, bevor die Einheit abgenommen ist. OpenJPA werden dann wissen, welche Felder waren anwesend und wird einen Nullwert ordnungsgemäß behandeln. Ihre Optionen sind die Fetch-Gruppen zu laden (ein OpenJPA Konzept, aber standardmäßig lädt es alle nicht-LAZY Felder) oder jedes Feld (dies kann teuer sein).

Ich würde empfehlen, Fetch-Gruppen in den meisten Fällen ist hier die Eigenschaft für persistence.xml.

<property name="openjpa.DetachState" value="fetch-groups"/>

Sie können mit abgesetzter Objektgraphen einige kluge Dinge tun, wenn Sie so geneigt sind. Das OpenJPA Handbuch enthält weitere Informationen unter

scroll top