« 第2回 日本Springユーザー会 | メイン | [ゴータマ]人に教えるということについて »

SpringのHibernateTemplateに定義されていない処理を実装する方法

SpringのHibernateTemplateに定義されているメソッドは、Hibernateで実現可能なことの一部しか存在しません。HibernateTemplateに無い処理を実装したいときには、HibernateCallbackを使います。(getHibernateTemplate().getSessionFactory()することも出来ますが、それじゃあ。。。ね)
例えばAccountというエンティティがあり、それに対してユーザー認証(nameとpasswordが一致しているかどうか)を行う場合の記述は以下のような感じです。

package net.grandnature.example.invoice.dao.hibernate;

import java.sql.SQLException;
import net.grandnature.example.invoice.dao.AccountDao;
import net.grandnature.example.invoice.entity.Account;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.criterion.Expression;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

public class AccountDaoImpl extends HibernateDaoSupport implements AccountDao {
 public Account findAccount(final String name, final String password) {
  HibernateCallback callback = new HibernateCallback() {
   public Object doInHibernate(Session session)
   throws HibernateException, SQLException {
    Criteria criteria = session.createCriteria(Account.class);
    criteria.add(Expression.eq("name", name));
    criteria.add(Expression.eq("password", password));
    return criteria.uniqueResult();
   }
  };
  return (Account) getHibernateTemplate().execute(callback);
 }
}

HibernateCallbackのメソッドdoInHibernateがコールバックされます。この例ではHibernateTemplateをそのまま使っても実現できますが、Listで返って来てしまうのでちょっと気持ち悪いですよね。

トラックバック

このエントリーのトラックバックURL:
http://www.grandnature.net/bin/mt-tb.cgi/26

コメントを投稿

About

2007年03月19日 17:32に投稿されたエントリーのページです。

ひとつ前の投稿は「第2回 日本Springユーザー会」です。

次の投稿は「[ゴータマ]人に教えるということについて」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。