参考: Implementing Spring-based DAOs without callbacks
HibernateTemplateを利用してDAOを実装する代わりに、Hibernateアクセスコードをコールバック内にラップすることをせずに、データアクセスコードを従来の方法で記述することも可能です。HibernateDaoSupportを基にしたクラスは、従来のトランザクションベースのセッションや、例外の変換メソッドを備えています。これらのコードは、トランザクション内で必ず処理させるため、getSession()メソッドのallowCreateに通常falseを渡します。
public class HibernateProductDao extends HibernateDaoSupport implements ProductDao {
public Collection loadProductsByCategory(String category) throws DataAccessException, MyException {
Session session = getSession(false);
try {
Query query = session.createQuery("from test.Product product where product.category=?");
query.setString(0, category);
List result = query.list();
if (result == null) {
throw new MyException("No search results.");
}
return result;
}
catch (HibernateException ex) {
throw convertHibernateAccessException(ex);
}
}
}
この手法の長所は、データへアクセスするコードでアプリケーション独自の例外をスローできる点です(一方HibenrateTemplateクラスでは、callback内でアプリケーション独自の例外をスローすることはできません)。但し、独自のチェックルーチンや例外をcallbackの後に実装することもできるので、依然HibernateTemplateを利用できます。
一般的には、HibernateTemplateクラスの便利なメソッドはシンプルで、たいていの場合に適しています。
「つまりたいていの場合はHibernateTemplateを使ったほうがいいよ」ということでしょうか。
0 件のコメント:
コメントを投稿