<commit_before>==================
更新
==================

.. contents:: 目次
   :depth: 3

更新を行うには、 ``@Update`` をDaoのメソッドに注釈します。

.. code-block:: java

  @Config(config = AppConfig.class)
  public interface EmployeeDao {
      @Update
      int update(Employee employee);

      @Update
      Result<ImmutableEmployee> update(ImmutableEmployee employee);
  }

デフォルトでは、UPDATE文が自動生成されます。
``@Update`` の ``sqlFile`` にtrueを設定することで、任意のSQLファイルにマッピングできます。

パラメータのエンティティクラスにエンティティリスナーが指定されている場合、
更新の実行前にエンティティリスナーの ``preUpdate`` メソッドを呼び出されます。
また、更新の実行後にエンティティリスナーの ``postUpdate`` メソッドを呼び出されます。

戻り値
======

パラメータがイミュータブルなエンティティクラスの場合、
戻り値はそのエンティティクラスを要素とする ``org.seasar.doma.Result``
でなければいけません。

上記の条件を満たさないない場合、戻り値は更新件数を表す ``int`` でなければいけません。

.. _auto-update:

SQLの自動生成による更新
=======================

パラメータの型はエンティティクラスでなければいけません。
指定できるパラメータの数は1つです。
引数は ``null`` であってはいけません。

.. code-block:: java

  @Update
  int update(Employee employee);

  @Update
  Result<ImmutableEmployee> update(ImmutableEmployee employee);

SQL自動生成におけるバージョン番号と楽観的排他制御
-------------------------------------------------

次の条件を満たす場合に、楽観的排他制御が行われます。

* パラメータのエンティティクラスに@Versionが注釈されたプロパティがある
* @UpdateのignoreVersion要素がfalseである

楽観的排他制御が有効であれば、バージョン番号は識別子とともに更新条件に含まれ、
1増分して更新されます。
このときの更新件数が0件の場合、楽観的排他制御の失敗を示す
``OptimisticLockException`` がスローされます。
また、更新件数が0件でない場合、 ``OptimisticLockException`` はスローされず、

ignoreVersion
~~~~~~~~~~~~~

エンティティのバージョンプロパティの値が1増分されます。
``@Update`` の ``ignoreVersion`` 要素がtrueの場合、
バージョン番号は更新条件には含まれず、UPDATE文のSET句に含まれます。
バージョン番号はアプリケーションで設定した値で更新されます。
この場合、更新件数が0件であっても、 ``OptimisticLockException`` はスローされません。

.. code-block:: java

  @Update(ignoreVersion = true)
  int update(Employee employee);

suppressOptimisticLockException`
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

``@Update`` の ``suppressOptimisticLockException`` 要素が ``true`` の場合、<commit_msg>更新クエリのドキュメントの誤りを修正<commit_after>==================
更新
==================

.. contents:: 目次
   :depth: 3

更新を行うには、 ``@Update`` をDaoのメソッドに注釈します。

.. code-block:: java

  @Config(config = AppConfig.class)
  public interface EmployeeDao {
      @Update
      int update(Employee employee);

      @Update
      Result<ImmutableEmployee> update(ImmutableEmployee employee);
  }

デフォルトでは、UPDATE文が自動生成されます。
``@Update`` の ``sqlFile`` にtrueを設定することで、任意のSQLファイルにマッピングできます。

パラメータのエンティティクラスにエンティティリスナーが指定されている場合、
更新の実行前にエンティティリスナーの ``preUpdate`` メソッドを呼び出されます。
また、更新の実行後にエンティティリスナーの ``postUpdate`` メソッドを呼び出されます。

戻り値
======

パラメータがイミュータブルなエンティティクラスの場合、
戻り値はそのエンティティクラスを要素とする ``org.seasar.doma.Result``
でなければいけません。

上記の条件を満たさないない場合、戻り値は更新件数を表す ``int`` でなければいけません。

.. _auto-update:

SQLの自動生成による更新
=======================

パラメータの型はエンティティクラスでなければいけません。
指定できるパラメータの数は1つです。
引数は ``null`` であってはいけません。

.. code-block:: java

  @Update
  int update(Employee employee);

  @Update
  Result<ImmutableEmployee> update(ImmutableEmployee employee);

SQL自動生成におけるバージョン番号と楽観的排他制御
-------------------------------------------------

次の条件を満たす場合に、楽観的排他制御が行われます。

* パラメータのエンティティクラスに@Versionが注釈されたプロパティがある
* @UpdateのignoreVersion要素がfalseである

楽観的排他制御が有効であれば、バージョン番号は識別子とともに更新条件に含まれ、
1増分して更新されます。
このときの更新件数が0件の場合、楽観的排他制御の失敗を示す
``OptimisticLockException`` がスローされます。
また、更新件数が0件でない場合、 ``OptimisticLockException`` はスローされず、
エンティティのバージョンプロパティの値が1増分されます。

ignoreVersion
~~~~~~~~~~~~~

``@Update`` の ``ignoreVersion`` 要素がtrueの場合、
バージョン番号は更新条件には含まれず、UPDATE文のSET句に含まれます。
バージョン番号はアプリケーションで設定した値で更新されます。
この場合、更新件数が0件であっても、 ``OptimisticLockException`` はスローされません。

.. code-block:: java

  @Update(ignoreVersion = true)
  int update(Employee employee);

suppressOptimisticLockException
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

``@Update`` の ``suppressOptimisticLockException`` 要素が ``true`` の場合、
{'fraction_non_alphanumeric': 0.18127218127218128, 'fraction_numerical': 0.003822003822003822, 'mean_word_length': 6.255445544554456, 'pattern_counts': {'":': 0, '<': 7, '<?xml version=': 0, '>': 7, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3490556', 'n_tokens_mistral': 2159, 'n_tokens_neox': 2051, 'n_words': 195}