可変パラメータを含む検索を行いたい場合は、次のように記述する。
例えば「メールアドレスが一致しているユーザの情報を取得する」という場合、メールアドレスが可変パラメータとなる。
下記はサンプルコード。
// コンフィギュレーションを作成する
Configuration config = new Configuration().configure();
// セッションファクトリーを作成する
SessionFactory sessionFactory = config.buildSessionFactory();
// セッションを取得する
Session session = sessionFactory.openSession();
// メールアドレスによる検索を行う
List list = session.createQuery(
"from SAMPLE_SERVICE_USER u" + " where u.mail = :mail")
.setParameter("mail", "test@test.co.jp").list();
検索結果をエンティティのリストとして取得する場合、createQueryにselectは書かなくてよい。
fromの次は、@Entityアノテーションのname属性で指定した名前(データベースのテーブル名)を指定する。
SAMPLE_SERVICE_USERをuという別名にし、同テーブルの属性mailでwhereを記述している。
whereの箇所で出ている":mail"の部分が可変パラメータとなる。
setParameterの第1引数に"mail"と書くと、":mail"の箇所が"test@test.co.jp"に置き換わる。
クエリの戻り値はObjectの配列となっているため、整形が必要。
// 結果を整理し、適切な形で呼び出し側に戻す
List<SampleServiceUser> sampleServiceUserList = new ArrayList<SampleServiceUser>();
for (int i = 0; i < list.size(); i++) {
Object[] item = (Object[]) list.get(i);
for (int j = 0; j < item.length; j++) {
if (item[j].getClass() == SampleServiceUser.class) {
sampleServiceUserList.add((SampleServiceUser) item[j]);
}
}
}
サンプルを動作確認が取れれば成功。
0 件のコメント:
コメントを投稿