2016-03-30 4 views
0

Dies ist meine OrderSet.hbm Datei. Es hat s wie es ist Kind (one-to-many) Beziehung.Ist cascade = "all-delete-orphan" inverse = "true" zusammen?

<list name="orderSetMembers" lazy="true" cascade="all-delete-orphan" inverse="true"> 
    <key column="order_set_id" not-null="true"/> 
    <list-index column="sequence_number"/> 
    <one-to-many class="OrderSetMember" /> 
</list> 

Dies ist meine OrderSetMember.hbm Datei. hat eine Viele-zu-eins-Beziehung zu seinem Elternteil. Ich wollte ein bidirektionales Mapping.

<many-to-one name="orderSet" class="OrderSet"> 
    <column name="order_set_id"/> 
</many-to-one> 

Können Eltern und Kind mit einem Sitzungsbefehl gespeichert werden? Oder muss ich noch eine Sitzung speichern, um das Kind zu speichern?

Session session = sessionFactory.getCurrentSession(); 
session.saveOrUpdate(orderSet); 

Das sind meine Daten-Modelle:

public class OrderSet { 
    private List<OrderSetMember> orderSetMembers; 
} 


public class OrderSetMember { 
    private OrderSet orderSet; 
} 

Antwort

0

cascade und inverse zwei völlig unterschiedliche Zwecke haben.

cascade erzählt, welche Operation Entity-Lebenszyklus automatisch auf Kind (ern) angewendet werden, wenn auf die Eltern angewandt.

inverse bedeutet, dass Kind der Besitzer des Vereins ist. Das bedeutet außerdem, dass die Beziehungsinformationen nicht mit der Datenbank synchronisiert werden, wenn Sie untergeordnete Elemente nicht auf der untergeordneten Seite zuordnen.

Zum Beispiel, wenn Sie ein zum orderSetMembers Sammlung in der Entitätsinstanz Eltern hinzufügen, aber Sie verlassen orderSet Feld null im Instanz, und dann session.saveOrUpdate(orderSet) aufrufen, wird das Ergebnis sein:

  1. Both OrderSet und Instanzen werden in der Datenbank gespeichert (save ist in Kaskade für die Kinder).
  2. order_set_id (Fremdschlüssel in der Tabelle, auf die abgebildet) auf null eingestellt. Dies liegt daran, dass der Eigentümer der Assoziation ist und es keine zugehörige Entität OrderSet gab, als Hibernate den Eigentümer der Assoziation zum Zeitpunkt der Dirty-Checks prüfte.
  3. Wenn Sie die obige OrderSet Instanz in einer neuen Sitzung lesen, werden Sie feststellen, dass die nicht in der orderSetMembers Sammlung entweder vorhanden ist.