Ruhezustand - Beispiel für dynamisches Update

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