動的更新とは

dynamic-update属性は、SQL UPDATE文に未変更のプロパティを含めるかどうかをHibernateに伝えます。

動的更新の例

1. dynamic-update = false

dynamic-updateのデフォルト値はfalseです。つまり、HibernateのSQL更新ステートメントに

変更されていないプロパティ

を含みます。

たとえば、オブジェクトを取得し、その値を変更して更新しようとします。

   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は次の更新SQL文を生成します。

Hibernate:
    update
        mkyong.stock__transaction
    set
        DATE=?,
        PRICE__CHANGE=?,
        PRICE__CLOSE=?,
        PRICE__OPEN=?,
        STOCK__ID=?,
        VOLUME=?
    where
        TRAN__ID=?

Hibernateは変更されていないすべての列を更新します。

2. dynamic-update = true

dynamic-insertをtrueに設定すると、HibernateのSQL更新ステートメントで変更されていないプロパティ** が除外されます。

たとえば、オブジェクトを取得し、その値を変更して再度更新します。

   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は異なる更新SQL文を生成します。

Hibernate:
    update
        mkyong.stock__transaction
    set
        VOLUME=?
    where
        TRAN__ID=?

Hibernateは変更された列のみを更新します。

それを設定する方法

アノテーションまたはXMLマッピングファイルを介して “` `dynamic-update`”プロパティを設定することができます。

1.注釈

@Entity
@Table(name = "stock__transaction", catalog = "mkyong")
@org.hibernate.annotations.Entity(
        dynamicUpdate = true
)
public class StockTransaction implements java.io.Serializable {

2. XMLマッピング

<class ... table="stock__transaction" catalog="mkyong" dynamic-update="true">
        <id name="tranId" type="java.lang.Integer">
            <column name="TRAN__ID"/>
            <generator class="identity"/>
        </id>

結論

この小さな ”

dynamic-update

“調整は、システムのパフォーマンスを確実に向上させ、それを行うことを強く推奨します。

フォローアップ

{空} 1。 Hibernate –

dynamic-insert属性

の例