Frage

Mein Szenario ist wie folgt:

  • Ich habe einige Objekte (Nachrichten), die markiert werden können,
  • So habe ich eine Tag Entität und viele-zu-viele-Beziehung
  • Die oben erfolgt und Arbeits
  • Nun, wenn Tagging, würde Ich mag nur neue Tags speichern, wenn sie nicht existieren (wo Existenz von Tag-Titel markiert ist)
  • wenn der Tag bereits vorhanden ist, möchte ich es zu meinem Objekt anstelle eines neuen
  • erkannt und gebunden werden

Was ist die einfachste / sauberste Weg, es zu tun?

BTW, aus irgendwelchen Gründen würde Ich mag künstliche Primärschlüssel (numerische Id) für meinen Tag Entität verwenden.

Danke!

War es hilfreich?

Lösung

Sie haben eine many-to-many-Beziehung, die Sie in Ihren Business-Klassen und Karte mit NHibernate zum Ausdruck bringen können. Die Struktur der Verknüpfungstabelle, die die Viele-zu-viele-Beziehung aufgelöst wird von einem Objekt verhindern mehr als einmal auf den gleichen Tag verknüpft ist.

Der einzige Weg, um die Regel in Ihrer Frage zu erzwingen, ist durch Code. Die Reihenfolge der Aufgaben würde wie etwas sein:

  1. Parse Benutzer eingegebenen Tag-Liste in einzelne Tags
  2. Schleife durch Tags ...

    a. Wenn ein Tag es fügen Sie dann existiert die Tags Sammlung Objekt

    b. erstellen Else einen neuen Tag, und fügen Sie den Tag Sammlung des Objekts

  3. Objekt Persist

Sie müssen Logik hinzufügen für vorhandene Tags suchen Konto Rechtschreibfehler unter in, Groß- und alternative Nutzung. Zum Beispiel wollen Sie keine Tags haben, dass sie gleiche Sache, aber tun nicht gleich sind Strings wie „ASPNET“ oder „ASP.NET“ oder „asp.net“. Die Qualität Ihrer Tag-Liste wird davon abhängen, wie robust der Code, der für die vorhandenen Tags überprüft wird.

Andere Tipps

Nur um zu klären - ein Tag kann auf viele Objekte fixiert werden, und ein Objekt viele Tags haben kann. Das ist, was eine many-to-many-Beziehung für mich bedeutet. Ist das, wie Sie es bedeuten?

Wenn Sie dies in SQL zu tun, müssen Sie Tabellen mit dem Namen TAG und OBJECT und eine Tabelle mit dem Namen TAG_OBJECT verbinden, die zwei Spalten enthalten, einen für jeden Primärschlüssel in den anderen Tabellen. Der Primärschlüssel in der TAG_OBJECT Join-Tabelle ist das Paar (TAG_ID, OBJECT_ID). Das garantiert eine einzigartige Paarung für jede Zeile.

Wenn Sie Hibernate verwenden, Sie fügen Sie einfach eine Liste oder Sammlung von Objekten als private Datenmember zu Ihrer Tag-Klasse und eine Liste oder Sammlung von Tags als private Datenmember zu Ihrer Objektklasse.

ich denke, Hibernate Ihre behandeln wird „nur dann, wenn es nicht vorhanden ist“, solange man eine gute Methode, um festzustellen, „tiefe Gleichheit“ zwischen zwei Instanzen von Tag zu schreiben.

Sie sollten auch eine eindeutige Einschränkung mit dem Tag title-Attribute hinzufügen. Hier ist ein Beispiel, das nicht ganz an Ihren Bedürfnisse anzupassen, weil es Java ist und XML, aber vielleicht wird der Hinweis genug sein, um Ihnen zu sagen, wo für NHibernate aussehen:

<element column="serialNumber" type="long" not-null="true" unique="true"/>

Für Ihren Fall wird die Spalte der Tag-Titel sein wird, Typ String und die anderen Flags bleiben, wie sie im Beispiel sind.

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