Hibernate - Beispiel für ein Attribut zur dynamischen Aktualisierung
Was ist Dynamic-Update?
Das Attribut dynamic-update teilt Hibernate mit, ob unveränderte Eigenschaften in die SQL-Anweisung UPDATE aufgenommen werden sollen.
Beispiel für ein dynamisches Update
1. dynamic-update = false
Der Standardwert für die dynamische Aktualisierung ist false. Dies bedeutetinclude unmodified properties in der SQL-Aktualisierungsanweisung des Ruhezustands.
Holen Sie sich beispielsweise ein Objekt und versuchen Sie, dessen Wert zu ändern und zu aktualisieren.
Query q = session.createQuery("from StockTransaction where tranId = :tranId "); q.setParameter("tranId", 11); StockTransaction stockTran = (StockTransaction)q.list().get(0); stockTran.setVolume(4000000L); session.update(stockTran);
Hibernate generiert die folgende SQL-Update-Anweisung.
Hibernate: update example.stock_transaction set DATE=?, PRICE_CHANGE=?, PRICE_CLOSE=?, PRICE_OPEN=?, STOCK_ID=?, VOLUME=? where TRAN_ID=?
Im Ruhezustand werden alle nicht geänderten Spalten aktualisiert.
2. dynamic-update = true
Wenn Sie die dynamische Einfügung auf true setzen, bedeutet diesexclude unmodified properties in der SQL-Aktualisierungsanweisung des Ruhezustands.
Beispiel: Rufen Sie ein Objekt ab und versuchen Sie, seinen Wert zu ändern und erneut zu aktualisieren.
Query q = session.createQuery("from StockTransaction where tranId = :tranId "); q.setParameter("tranId", 11); StockTransaction stockTran = (StockTransaction)q.list().get(0); stockTran.setVolume(4000000L); session.update(stockTran);
Der Ruhezustand generiert eine andere SQL-Update-Anweisung.
Hibernate: update example.stock_transaction set VOLUME=? where TRAN_ID=?
Der Ruhezustand aktualisiert nur die geänderten Spalten.
Performance issue
In einer großen Tabelle mit vielen Spalten (Legacy-Design) oder mit großen Datenmengen sind Aktualisierungen einiger nicht geänderter Spalten absolut unnötig und wirken sich stark auf die Systemleistung aus.
So konfigurieren Sie es
Sie können die Eigenschaften von "dynamic-update
" über eine Anmerkung oder eine XML-Zuordnungsdatei konfigurieren.
1. Anmerkung
@Entity @Table(name = "stock_transaction", catalog = "example") @org.hibernate.annotations.Entity( dynamicUpdate = true ) public class StockTransaction implements java.io.Serializable {
2. XML-Zuordnung
Fazit
Diese kleine Optimierung von „dynamic-update“ erhöht definitiv die Systemleistung und wird dringend empfohlen.
Nachverfolgen
1. Beispiel für Ruhezustand -dynamic-insert attribute