2009-04-27 8 views
6

Ich bin gerade mit NHibernate auf ein großes Problem gestoßen. Ich habe 2 Objekte, jedes mit einer Sammlung von Dingen. Ich muss eine Sache aus der Sammlung von Objekt A in die Sammlung von Objekt B verschieben. Ich bekomme eine Fehlermeldung über ein gelöschtes Objekt, weil ich glaube, NHibernate versucht, die Sache aus der Sammlung von Objekt A zu löschen, wenn sie es behalten muss für Objekt B. Aus DB-Sicht ist es nur eine Frage der Aktualisierung der "Eltern" -Eigenschaft auf das neue Objekt (Objekt B). Aber mit den Sammlungen bin ich nicht wirklich sicher, was zu tun ...NHibernate-Sammlungen und bewegliche Objekte

Gibt es eine bekannte Prozedur, um Objekte aus einer Sammlung in eine andere in NHibernate zu verschieben?

Vielen Dank im Voraus für jede Hilfe.

Grüße,

Eric.

+0

Wie haben Sie die Sammlungen abgebildet? –

Antwort

3

Ich gehe davon aus, dass Sie Cascade verwenden in der Abbildung für die Klasse, die durch Objekte A versucht mit und B, dh A und B, sind beide Instanzen einer Klasse X, und die Zuordnung von X enthält ein Kaskadenattribut für die Sammlung, die das zu übertragende Objekt enthält.

Mit dieser Annahme kann dies helfen.

Wenn Sie das Objekt von einer Sammlung in die andere übertragen wollen, müssen Sie überlegen, ob das Objekt, das verschoben wird, eine Existenz haben soll, die unabhängig von den beiden Sammlungen ist.

Wenn das Übertragungsobjekt nicht von allein gespeichert wird, treten beim Übertragen Probleme auf, da das übertragene Objekt der Sitzung bereits bekannt ist.

Es gibt zwei Möglichkeiten, die ich mir vorstellen kann. Das Bessere von beiden ist wahrscheinlich, das Übertragungsobjekt als ein unabhängiges Objekt zu behandeln, das für sich in der db gespeichert wird (d. H. Nicht auf Cascading in der Zuordnung der Objekte mit der Sammlung angewiesen ist). Konzeptionell macht dies Sinn, denn wenn Sie es von einer Sammlung auf die andere übertragen können, bedeutet das, dass es irgendwie unabhängig von den beiden Objekten mit den Sammlungen ist. Es bedeutet, dass Sie mit Waisen enden könnten.

Wenn Sie bei der Verwendung von Kaskade in den Zuordnungen bleiben möchten, müssen Sie aus Objekt A in einer anderen Transaktion als dem Hinzufügen zu Objekt B entfernen. Ich vermute, dass das nicht das ist, was Sie tun möchten.

+0

Rob, danke für deine Antwort. Wir haben NHibernate nur ein paar Tage später gelöscht und aus einigen Gründen kann ich mich nicht daran erinnern, Benachrichtigungen über Antworten auf meinen Thread zu erhalten. Danke trotzdem für deine Hilfe. –

0

Haben Sie Mapping

Kaskade = "all-löschen-Waise"