Webアプリケーション(jsp + hibernate + tomcatのhsqldb)コードでは、Daoの実装をいくつか使用しています。基本クラスDaoの実装には、ドメイン固有のDaoクラスは、この基本クラスを拡張して特定のfind()、delete()メソッドを提供します。休止状態のDAO実装から意味のある例外をスローする
私は、error500メッセージの代わりにエラーが発生したときに意味のあるメッセージを提供したいと考えました。 基本クラスメソッドはget()、saveOrUpdate()メソッドにhibernate.Sessionクラスを使用するため、HibernateExceptionをスローします。ドメイン固有のサブクラスはこれをキャッチしてカスタム例外でラップし、再スローします。
私は、これはit..Iあなたの意見/提案心から
を歓迎行うには正しい方法であれば、このway..Iは知らない、それを試してみました、
ジム
abstract class BaseDao{
private Class persistentClass;
public BaseDao(Class persistentClass) {
super();
this.persistentClass = persistentClass;
}
public Object findById(Long id) {
SessionFactory factory = HibernateUtil.getSessionFactory();
Session session = factory.openSession();
Object object = null;
try {
object = (Object) session.get(persistentClass, id);
return object;
}
finally {
session.close();
}
}
@Override
public void saveOrUpdate(Object obj) {
SessionFactory factory = HibernateUtil.getSessionFactory();
Session session = factory.openSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
session.saveOrUpdate(obj);
tx.commit();
}catch(HibernateException e){
if (tx != null) {
tx.rollback();
}
throw e;
}finally {
session.close();
}
}
}
ドメイン固有のDAOは
class SaleOrderDao extends BaseDao{
public SaleOrderDao() {
super(SaleOrder.class);
}
@Override
public SaleOrder findSaleOrderById(Long saleOrderId){
SaleOrder so = (SaleOrder)findById(saleOrderId);
return so;
}
@Override
public void saveOrUpdateSaleOrder(SaleOrder so){
try{
saveOrUpdate(so);
}catch(HibernateException e){
String msg = "could not insert/update saleorder"+so.getSONumber();
throw new SaleOrderDaoException(msg+"/ "+e.getMessgae());
}
}
}
私の意見では、メソッドのシグネチャに例外をスローすると、例外を再スローする必要がなくなり、try catchでメソッドの使用を制限することができます。 –