SQLはすべてバインド変数(?)を使った準備された文に変換されて実行されますが、 このドキュメントでは、発行されたSQLがどのようなものかわかりやすくするためにバインド変数を実際の値に置き換えたログ用のSQLを示します。
src/test/java/tutorial/UpdateTest.javaのtestUpdateメソッドを参照してください。 SQLの自動生成による更新です。
使用するDaoのメソッド定義は次のとおりです。
Daoのメソッドは次のように呼び出します。
SQLのログは次のように出力されます(改行しています)。
@Versionが注釈されたversionプロパティに対応するカラムは検索条件に含まれます。 また、versionプロパティに対応するカラムが増分して更新されます。
updateTimestampプロパティはEmployeeListenerで自動設定されます。 src/test/java/tutorial/EmployeeListener.javaを参照してください。
エンティティクラスに@OriginalStatesが注釈されたプロパティがある場合、 バージョン番号を除き、 Daoから取得後に変更された値のみがUPDATE文のSET句に含まれます。
src/test/java/tutorial/UpdateTest.javaのtestUpdateWithSqlFileメソッドを参照してください。 SQLファイルによる更新です。
使用するDaoのメソッド定義は次のとおりです。 @UpdateのsqlFile要素にtrueを指定します。
Daoのメソッドに対応するSQLファイルのパスはMETA-INF/tutorial/dao/EmployeeDao/updateWithSqlFile.sqlです。 SQLファイルには次のように記述されています。
Daoのメソッドは次のように呼び出します。
SQLのログは次のように出力されます。
SQLファイルによる更新では、バージョンの自動増分は行われません。 また、エンティティリスナーも呼び出されません。
SQLファイルによる更新では、エンティティクラスに@OriginalStatesが注釈されたプロパティがあってもそのプロパティは使用されません。