Es ist eine bekannte Tatsache, dass Oracle leere Zeichenfolgen als null behandelt.Oracle konvertiert leere Zeichenfolge in null, aber JPA aktualisiert Entitätscache nicht entsprechend
Ich habe jedoch ein Problem wegen dieses Verhaltens wegen JPA Caching.
Erstens behalte ich mit JPA (Toplink Essentials) eine Entität, die eine leere Zeichenfolge als ein Feld hat. Oracle konvertiert diesen Wert beim Speichern in null.
Wenn ich jedoch die Entität abrufen, scheint JPA es aus dem Cache zurückzugeben, wobei dieses Feld immer noch eine leere Zeichenfolge ist. JPA scheint nicht zu wissen, dass das, was in der Datenbank gespeichert wurde, tatsächlich ein Nullwert ist, und diese Inkohärenz verursacht Probleme.
Gibt es eine Möglichkeit, dieses Problem auf der JPA- oder Anwendungsserver (Oracle AS) -Konfigurationsebene zu lösen? Dieses etwas, das ich nicht in der Anwendungsebene beheben möchte (aber tun werde, wenn es notwendig ist).
Tatsächlich werden diese Werte als null in der Datenbank gespeichert. – tputkonen
OK ... haben Sie überprüft, ob das Ergebnis DBNull ist? da java macht einen Unterschied zwischen Null und DBNull – Gambrinus
Nicht sicher, was Sie meinen, aber zuerst behalte ich eine Entität mit Feld foo (leere Zeichenfolge). Oracle speichert dies als null. Dann teste ich, ob foo Null-Wert enthält, wenn nicht, versuche es in einem anderen nicht-nullbaren Feld zu speichern => Ausnahme. Ich wünschte, JPA würde foo auf die gleiche Weise aufheben, wie IDs gespeichert werden, wenn sie bestehen bleiben. – tputkonen