Warum setzt Hibernate standardmäßig dynamic insert = false?

8

Könnte mir jemand erklären, warum Hibernate standardmäßig die dynamische Einfügung = false einstellt, und was ist der Grund dafür?

    
Venkatesh 12.02.2014, 07:54
quelle

3 Antworten

4

Was @ jb-nizet sagte.

Auch dynamic-insert="true" ist eine schlechte Idee in meinem Buch.

Wenn Sie Nullfelder aus dem generierten SQL überspringen, befinden Sie sich bald in einer Situation, in der Sie die Spalten not null default deklarieren werden, was dazu führt, dass die persistenten Daten sich von den Entitätsdaten unterscheiden, von denen Hibernate bekannt ist. Dies wird Frustration verursachen und wahrscheinlich dazu führen, dass Sie auf teure session.refresh() -Aufrufe zurückgreifen.

Nehmen Sie zum Beispiel eine Spalte

an %Vor%

und Sie speichern eine Entität mit einem Nullwert für die Eigenschaft, die dieser Spalte zugeordnet ist.

Mit dynamic-insert erhalten Sie eine Entität, die für die Eigenschaftsnachricht im Speicher einen Nullwert hat, während gleichzeitig die entsprechende Datenbankzeile '' hat.

Ich hoffe, ich habe Sinn gemacht. Vor allem, wenn Sie sich für ein solches Szenario dynamisch einfügen (um nicht alle Spalten für Nicht-Null-Spalten setzen zu müssen und sich auf eine Standardbedingung verlassen zu müssen), denken Sie noch einmal nach.

    
dkateros 12.02.2014, 08:26
quelle
6

Weil es keine wesentliche Leistungsverbesserung zum Überspringen von Nullfeldern beim Einfügen einer Entität hinzufügt.

Im Gegenteil, es kann die Leistung verringern, da Hibernate nicht nur die gleiche vorbereitete Anweisung verwenden kann, um eine Zeile in eine Tabelle einzufügen, sondern auch mehrere Einfügungen in einen einzelnen Stapel ausführen kann Anweisung für jede einzufügende Entität, die von den Feldern, die null sind, und den Feldern, die nicht enthalten sind, abhängig ist.

Also, mehr Komplexität, für eine reduzierte Leistung.

    
JB Nizet 12.02.2014 08:01
quelle
6

Die dynamischen Einfügungen und Aktualisierungen sind aus zwei Gründen sehr nützlich:

Das dynamische Einfügen / Aktualisieren hat jedoch auch Nachteile:

Also, es gibt keinen guten oder schlechten Weg. Es hängt nur von Ihren Datenzugriffsmustern ab, um herauszufinden, welche dieser beiden für eine gegebene Entität sinnvoll ist.

    
Vlad Mihalcea 27.03.2017 07:45
quelle

Tags und Links