Angenommen, ich habe die folgende Hibernate-Map-Klasse:
%Vor% Wenn ich ein Objekt von ClassA
aus einer Hibernate-Sitzung lese, wird das bList
-Feld wie erwartet mit einem PersistentList
-Objekt initialisiert.
Ich finde mich mit einer Anforderung wo in Situationen, in denen die Liste leer ist, Ich brauche Hibernate, um das bList
-Feld zu null
zu initialisieren, anstatt mit einem leeren PersistentList
. Theoretisch verfügt Hibernate über die erforderlichen Informationen, da das Abrufen auf der Liste sehr wichtig ist. Das Problem ist, dass laut Abschnitt 6.1 der Hibernate-Dokumentation :
Aufgrund der zugrunde liegenden Beziehung Modell, sammlungwertige Eigenschaften tun unterstützt keine Nullwert-Semantik. Hibernate unterscheidet nicht zwischen eine Nullsammelreferenz und ein leere Sammlung.
Das ergibt durchaus Sinn, aber ich hoffe, dass jemand eine schlaue List vorbringen kann, um diese Einschränkung zu überwinden. Ich denke, vielleicht ein Listener / Callback-Mechanismus könnte mir erlauben, leere Listen durch Null-Referenzen zu ersetzen.
Haben Sie versucht, die Methode getbList () einzutragen? Sie könnten tun:
%Vor%Hibernate erstellt immer ein Objekt für Ihre Referenzen, aber Sie dürfen die Daten innerhalb der Getter und Setter steuern. Wenn die Liste 0 Elemente enthält, können Sie immer null zurückgeben.
Ich bin neugierig, warum Sie das als "Einschränkung" betrachten - hat eine null bList
tatsächlich eine andere Bedeutung für Ihre Anwendung als eine leere bList
?
Ich denke, dass in den meisten Bereichen eine Nullsammlung und eine leere Sammlung dieselbe semantische Bedeutung haben, weshalb ich denke, dass die Hibernate-Entwickler versuchten, Hibernate darauf zu beschränken, nur eine zu verwenden. Es macht nicht viel Sinn, immer if (bList == null || bList.isEmpty)
zu überprüfen, wenn die beiden immer dasselbe bedeuten.