Frage

Ich habe ein einfaches pojo namens „Parent“ bekam die eine Sammlung von Objekt enthält „Child“.

In Hibernate / JPA, es ist einfach eine Eins-zu-viele Assoziations, Kinder wissen nicht, ihre Eltern: Diese Child-Objekte verschiedene Arten von Eltern haben kann, so dass es einfacher nicht die Eltern wissen (man denke an Kinder, die Stichworte darstellt und Eltern können verschiedene Objekttypen sein, die Tags haben).

Nun, ich meine Eltern-Objekt an den Client Sicht auf meiner Web-Site senden Benutzer zu erlauben, es zu ändern.

Für sie, ich benutze Hibernate / GWT / Gilead.

Meine User-mades einige Änderungen und klicken Sie auf die Schaltfläche Speichern (Ajax), die an den Server meine Eltern Objekt sendet. Felder meiner Eltern hat aber noch wichtiger ist modifiziert worden, Objekte, einige Kind wurde in der Sammlung hinzugefügt oder gelöscht werden.

Zur Übersicht, wenn Eltern-Objekt-Server zurückkommt, hat es jetzt in seiner Sammlung: - neues „Kind“ Objekte, bei denen id null und Notwendigkeit ist zu beharren - „Child“ Objekte geändert, wenn id nicht null und Notwendigkeit ist merge zu sein - möglicherweise gehackt „Child“ Objekte, bei denen id nicht null ist, ist aber nicht ursprünglich von der Mutter Besitz - Child-Objekte fehlen (gestrichen): Notwendigkeit, entfällt

Wie wollen Sie speichern das übergeordnete Objekt (und seine Sammlung)? Sie laden Sie die übergeordnete Sammlung von Datenbank jeweils Objekte der modifizierten Sammlung zu vergleichen, um zu sehen, ob es kein gehackter Artikel ist? Haben Sie die alte Sammlung löschen (zu entfernen Waise) und wieder neues Kind hinzufügen (aber es gibt einige Kinder, die nicht geändert hat)?

Dank

PS: sorry für mein Englisch, ich hoffe, Sie verstehen, haben das Konzept;)

War es hilfreich?

Lösung 2

Die beste Lösung, die ich gefunden habe, ist eine DTO zu verwalten, manuell erstellt. Die DTO sendet nur Daten an den Client benötigt. Für jede Felder, die ich im schreibgeschützten Modus gesetzt werden soll, berechne ich eine Unterschrift auf einem geheimen Schlüssel aus, dass ich an dem Client mit meinem dto senden.

Wenn meine DTO zurück zum Server kommt, ich die Unterschrift überprüfen um sicher zu sein, dass meine Lese nur Felder haben sich nicht geändert (die Signatur mit Rückwegs Felder neu zu berechnen und vergleichen Sie es mit der Unterzeichnung des Rückwegs mit dto)

Es erlaubt mir, Nur-Lese-Felder angeben und sicher sein, dass meine Objekte nicht gehackt werden.

Andere Tipps

Etwas in Ihrem Stapel hat die Logik, die Sie sprechen, liefern und angesichts Ihrer Umstände es Sie ist wahrscheinlich. Sie den aktuellen persistenten Zustand des Objekts durch das Lesen von Ihrer Datenquelle erhalten müssen, so dass Sie den Vergleich tun können. Beachten Sie, dass, wenn mehrere legitimen Aktionen Ihr übergeordnetes Objekt und seine Sammlung aktualisieren können gleichzeitig werden Sie große Sorgfalt auf der Definition Ihre Transaktion Getreides und die Thread-sichere Art des Codes nehmen.

Dies ist kein einfaches Problem mit irgendwelchen Mitteln, und es kann gut Rahmen Funktionen, die helfen können, aber ich bin noch etwas zu finden, die diese für eine wirkliche Welt Implementierung gelöst hat mir begegnet ist, besonders dort, wo ich Logik, die versucht, zu unterscheiden zwischen legitimen und „gehackt“ Daten.

Sie können betrachten Sie Ihre Architektur so zu verändern, dass die Eltern und Kinder in getrennten Aktionen beibehalten werden. Es kann nicht in Ihrem Fall sinnvoll sein, aber Sie könnten ein feineres Korn der Transaktion durch Aufspaltung der Persistenz Aktionen und bieten kindgerechte Sicherheit haben können, die Ihr Problem der Hacker ein wenig besser handhabbar macht.

Viel Glück. Ich empfehle Ihnen, zeichnen ein detailliertes Flussdiagramm der Logik, bevor Sie zu viel Kodierung tun.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top