その他メソッド
DAO (Data Access Object) インタフェースには様々なメソッドを持たせることができます.
- エンティティの永続化
- エンティティの削除
- 管理されたエンティティか判定
- エンティティの分離
- エンティティのマージ
- エンティティのリフレッシュ
- エンティティのリードロック
- エンティティのライトロック
- JPQLによる更新・削除
- SQLによる挿入・更新・削除
エンティティの永続化
エンティティを永続化するメソッドです.
- メソッド名 (正規表現)
persist
- 引数
- エンティティ
- 戻り値
void
- 例
public interface EmployeeDao { void persist(Employee emp); }
エンティティの削除
エンティティを削除するメソッドです.
- メソッド名 (正規表現)
remove
- 引数
- エンティティ
- 戻り値
void
- 例
public interface EmployeeDao { void remove(Employee emp); }
管理されたエンティティか判定
エンティティが永続コンテキストに管理されているか判定するメソッドです.
- メソッド名 (正規表現)
contains
- 引数
- エンティティ
- 戻り値
boolean
(管理されたエンティティならtrue
)- 例
public interface EmployeeDao { boolean contains(Employee emp); }
エンティティの分離
管理されたエンティティを永続コンテキストから分離するメソッドです.
エンティティ単位で分離する方法はJPA使用で定められていないため,
このメソッドはJPA実装固有の方法で実現されます.
エンティティ単位の分離が実現できないJPA実装ではUnsupportedOperationException
がスローされます.
- メソッド名 (正規表現)
detach
- 引数
- エンティティ
- 戻り値
void
- 例
public interface EmployeeDao { void detach(Employee emp); }
エンティティのマージ
分離されたエンティティを永続コンテキストにマージするメソッドです.
- メソッド名 (正規表現)
merge
- 引数
- 分離されたエンティティ
- 戻り値
- 管理されたエンティティ
- 例
public interface EmployeeDao { Employee merge(Employee emp); }
エンティティのリフレッシュ
管理されたエンティティのを最新の状態にするメソッドです.
- メソッド名 (正規表現)
refresh
- 引数
- エンティティ
- 戻り値
void
- 例
public interface EmployeeDao { void refresh(Employee emp); }
エンティティのリードロック
管理されたエンティティのリードロックを獲得するメソッドです.
- メソッド名 (正規表現)
readLock
- 引数
- エンティティ
- 戻り値
void
- 例
public interface EmployeeDao { void readLock(Employee emp); }
エンティティのライトロック
管理されたエンティティのライトロックを獲得するメソッドです.
- メソッド名 (正規表現)
writeLock
- 引数
- エンティティ
- 戻り値
void
- 例
public interface EmployeeDao { void writeLock(Employee emp); }
JPQLによる更新・削除
Named Queryを使用して更新・削除を行うメソッドです.
使用するNamed Queryの名前はDaoのインタフェース名または問い合わせ対象のエンティティ名と,メソッド名をピリオドで
連結したものになります.
メソッドに@QueryName
を付けることにより,使用するNamed Queryの名前を
明示的に指定することもできます.
検索順は次のとおりです.
- (もしあれば)
@QueryName
アノテーションで指定された名前 - <DaoのFQN>.<Daoのメソッド名>
- <Daoの単純名>.<Daoのメソッド名>
- <エンティティ名>.<Daoのメソッド名>
JPQLは@NamedQueryアノテーションまたはマッピングファイルで定義します.
- メソッド名 (正規表現)
(update|delete|remove).*
- 引数
- JPQLに含まれるパラメータの並び
- 戻り値
void
またはint
(更新または削除された行数)- 例
public interface EmployeeDao { int updateSalaryByName(String name, int salary); }
- 実行されるNamed Queryの例
<named-query name="Employee.updateSalaryByName"> <query> UPDATE Employee SET salary = :salary WHERE name = :name </query> </named-query>
SQLによる挿入・更新・削除
S2Dao相当の2WAY-SQLファイルを使用して挿入・更新・削除を行うメソッドです.
使用するSQLファイルの名前は,Daoのインタフェース名 とメソッド名をアンダースコアで連結し,
拡張子 .sql
を付加したものになります.
SQLファイルはDaoインタフェースのパッケージと同じ階層のディレクトリに配置します.
SQLによる検索は,JPA (EntityManager
) を使用せず,JDBC APIを直接使用します.
- メソッド名 (正規表現)
(insert|update|delete|remove).*
- 引数
- SQLに含まれるパラメータの並び
- 戻り値
void
またはint
(更新または削除された行数)- 例
public interface EmployeeDao { List<EmployeeDto> deleteByDepartmentName(String departmentName); }
- 実行されるSQLファイルの名前の例
EmployeeDao_deleteByDepartmentName.sql
- 実行されるSQLファイルの例
DELETE Employee WHERE department.name = /*departmentName*/'foo'