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.
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.
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.