更新系メソッドでSQLファイルを使う場合もエンティティリスナーを呼び出すように変更
Domaですが、次のバージョン(1.7.0)から、Daoの更新系メソッドでSQLファイルを使う場合もエンティティリスナーを呼び出すようにします(これまでは、SQL自動生成の更新系メソッドdだけが対象でした)。SQLファイルを使ったバッチ更新のときも呼び出します。
リスナー
// リスナーはデータベースにSQLを発行する直前に呼び出されます public class EmployeeListener implements EntityListener<Employee> { @Override public void preDelete(Employee employee) { ... } @Override public void preInsert(Employee employee) { ... } @Override public void preUpdate(Employee employee) { ... } }
エンティティ
// リスナーはエンティティに指定しておきます @Entity(listener = EmployeeListener.class) public class Employee { ... }
Dao
@Dao(config = AppConfig.class) public interface EmployeeDao { @Update int update(Employee employee); // リスナーを呼び出す @Update(sqlFile = true) int updateWithSqlFile(Employee employee); // これまでリスナーを呼び出さなかったけど次のバージョンからは呼び出す @BatchUpdate int batchUpdate(List<Employee> employee); // リスナーを呼び出す @Update(sqlFile = true) int batchUpdateWithSqlFile(List<Employee> employee); // これまでリスナーを呼び出さなかったけど次のバージョンからは呼び出す @Update(sqlFile = true) int updateNameAndAge(String name, int age); // 更新対象がエンティティでない場合はリスナー呼び出さない }
いま思えば、最初からこういう仕様にしておけばよかったわけですが、なぜかこの仕様を思いつかず、SQLファイルを使う場合が若干不便でした。でもこれで使い勝手がよくなるはず。
リスナーは、タイムスタンプや更新者情報などの設定に適しています。