Frage

ich eine ziemlich einfache Anwendung zu entwerfen, ich versucht, und ich bin immer ein wenig mit Hibernate Definition der Einheit und Wertobjekten verwechselt (wie in Kapitel 4 von Java Persistence mit Hibernate definiert).

Was ich habe, ist eine App, mit Kunden, die Aufträge vergeben können (one to many Beziehung). Jeder dieser Aufträge hat viele Auftragszeilen (auch eine bis viele). Nun, ich denke, dass die Kunden Identität (Kundennummer) und so tun Aufträge (Bestellnummern), so sind sie daher Entitätsobjekten? Meine Verwirrung kommt in den Auftragszeilen.

Eine Bestellung Linie Menge, Artikelnummer und Preis. Eine Auftragszeile kann nicht ohne seine Ordnung existiert und hat keine eigene Identität, damit ich es als Wertobjekt sehen. Aber ich kann nicht um Zeile einen Teil der Auftragstabelle machen, da es eine Eins-zu-Beziehung zwischen einem Auftrag und den Auftragslinien ist. Wie kann man zu viele Beziehungen mit der Definition eines Wertobjekt arbeiten? Aus dem Hibernate Buch:

  

„Ein Wertgegenstand Typ hat keine Datenbankidentität;. Es gehört zu einer Einheit Instanz und sein dauerhafter Zustand wird in der Tabellenzeile der besitzenden Einheit eingebettet Werttypen haben keine Identifikatoren oder Bezeichner Eigenschaften“

Wenn jemand meine Verwirrung aufklären würde ich wirklich zu schätzen es:)

War es hilfreich?

Lösung

Hibernate Dokumentation macht einen Unterschied zwischen Entitätstyp und Wert Typ , nicht Value Object.

  
      
  • Objekt von Entity-Typ: hat seine eigene Datenbank Identität
  •   
  • Wertgegenstand Typ: gehört zu einer Einheit, und sein dauerhafter Zustand wird in der Tabellenzeile der besitzenden Einheit eingebettet. Werttypen haben keine Identifikatoren oder Bezeichner Eigenschaften.
  •   

Soweit ich mich erinnern kann, verwendet das Buch eine Probe mit einem address als einzelnem String und ein user Objekt dargestellt, die eine Adresse String enthält:

  • als Werttyp implementiert (die typischerweise auf der Datenbankebene eine Spalte in der gleichen Tabelle bedeutet), wenn der Benutzer gelöscht wird, werden dann so ist seine Adresse. Die Adresse kann nicht ohne dass die Benutzer lebt und nicht mit anderen geteilt werden kann.

  • Implementiert als Einheit Typ (was wahrscheinlich bedeutet, eine separate Tabelle verwendet wird), würden die Adressen ohne dass der Benutzer in ihrem eigenen Recht bestehen und zwei Benutzer der Lage wären, die gleiche Adresse zu teilen.

In Ihrem Fall eine Auftragszeile gehört nicht zu einem Auftrag, dessen dauerhaften Zustand wird in der Reihenfolge Zeile nicht eingebettet (nicht sinnvoll ist), es hat seine eigene Identität (aus der orderId und productId) . Line bestellen ist definitiv kein Wert Typ, es ist ein Entitätstyp.

Eigentlich sobald Sie in Bezug auf Vereinigungen (one-to-one, one-to-many, usw.) denken, Sie sind sicher zu manipulieren Einheiten.

Andere Tipps

Ich denke, was Sie haben, ist eine eher allgemeine ORM Frage.

Sie haben erwähnt, „ Eine Bestellung Linie kann nicht ohne seine Ordnung existieren und hat keine eigene Identität “.
Nun, obwohl Orderline kann nicht mit einem Auftrag gibt, bedeutet nicht, es keine Identität haben kann.

Nehmen Sie Ihren Auftrag Einheit, kann es nicht ohne Kunden existiert, aber Sie es bereits als eine Einheit betrachtet, ja?

So, hier ist ein Vorschlag für Unternehmen:
- Kunde (kann hat keine oder mehr Order-Entitäten)
- Order (kann eine oder mehr Orderline Entitäten)
- Orderline

Ich glaube, du bist für ein Verbundelement suchen. Es gibt ein Beispiel in der Referenz, die Ordnung und purchasedItems tatsächlich verwendet (Auftragszeilen). Wenn Hibernate sagt es nicht allein stehen kann, heißt das noch lange nicht, dass es nicht seinen eigenen Tisch haben kann, nur, dass sie immer mit dem übergeordneten Elemente zuzugeordnet:

<class name="eg.Order" .... >
  ....
  <set name="purchasedItems" table="purchase_items" lazy="true">
    <key column="order_id"/>
    <composite-element class="eg.Purchase">
      <property name="purchaseDate"/>
      <property name="price"/>
      <property name="quantity"/>
      <many-to-one name="item" class="eg.Item"/>
    </composite-element>
  </set>
</class>

Von: Kollektionen von abhängigen Objekte

Wertobjekt ist ein kleines Objekt, das eine einfache Einrichtung, deren Gleichheit darstellt, wird auf Identität nicht zugrunde gelegt: das heißt zwei Wertobjekte sind gleich, wenn sie den gleichen Wert hat, muß nicht unbedingt die gleiche objecect sein

Sie können auftrag Linien als Werttyp und Werttyp machen, sind mit einer Eins-zu-Eins-Abbildung sowie ein Eins-zu-viele-Mapping unterstützt. Offensichtlich Java Collections werden verwendet, um die * -bis-Beziehung von Werttyp zur Karte mit entity.Inside geeigneter Sammlung, Elemente und Composite-Elemente verwendet werden, je nach Bedarf und wird nachfolgend beschrieben: Für eine Eins-zu-Beziehung zwischen Einheit und Wertetyp (non JDK-Typ), Verbundelement verwendet. Für eine Eins-zu-viele-Beziehung in die Wert-Typ-Tabelle ein einzelnes Attribut von JDK Typ enthalten ist (sagen string), Element verwendet wird. Dieses Konzept wird in Kapitel 6 der Java Persistenz mit Hibernate gegeben. Detaillierte Informationen entnehmen Sie diesen Link https://docs.jboss.org/hibernate/orm /3.5/reference/en/html/components.html

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