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