2014-04-01 25 views
2

我没有从现有的答案得到正确的理解我完全基于表单的网络应用程序,其中我有一个每个窗体的弹簧控制器。Spring控制器,服务类,HiberNate Dao类?为什么在dao的服务类中没有例外?

具有所有服务类实例的变量代码(单例对象)声明的公共基类(避免在每个控制器中声明bo成员变量,用于业务服务交互),它是所有控制器的父代。

具有所有dao服务实例的变量(单例对象)声明的代码的公共基类,它是所有BO的类的父代。

具有HibernateTemplate变量(单例对象)声明的代码的通用基类,使用@Autowired annotaions的SessionFactory.Which是所有dao类的父代。上述三个类中都有Logger对象实例的父代。

一个fbisExceptionHandler.java它从所有控制器上所有@RequestMapping方法捕捉异常的波纹管

@ControllerAdvice 
       public class ExceptionControllerAdvice 
      { 
       @ExceptionHandler(Exception.class) 
       public ModelAndView exception(Exception e) 
       { 
           ModelAndView mav = new ModelAndView("exception"); 
           mav.addObject("name", e.getClass().getSimpleName()); 
           logger.error(e.getMessage()) 
           mav.addObject("message", e.getMessage()); 
           return mav;  
       } 
      } 

请回答我的问题
1)是用于处理所有异常i将这种单一的方法精细,E那些陷入控制器,服务类,dao类?
2)为什么我的所有hibernate dao的方法不使用try..catch块或在方法签名中抛出declaraion .... hibernate dao的did'nt是否抛出任何异常?如果是,他们在哪里发现?
例如我的一个hibernate dao是
3)如何处理来自db供应商的所有常量?有没有休眠的内置方式? 4)为什么我所有的bo的方法都不使用try..catch块,或者在方法签名中抛出declaraion ....抛出和捕获了什么异常?

My sample dao 

    package com.fbis.form18.daoimp; 
     all imports 
     @Repository 
     public class Form18daoImp implements Form18Dao{ 
      @Autowired 
      SessionFactory sessionFactory; 
      HibernateTemplate hibernateTemplate; 
      @Autowired 
      public void setSessionFactory(SessionFactory sessionFactory) 
      { 
       this.hibernateTemplate=new HibernateTemplate(sessionFactory); 
      } 
      public void save(Form18Dtls form18dtls) { 
       sessionFactory.getCurrentSession().save(form18dtls); 
          logger.info("Form18Dtls saved successfully"); 
      } 
      @Override 
      public Form18Dtls findbyFacId(String facID) { 
       @SuppressWarnings("rawtypes") 
       List list=hibernateTemplate.find("from Form18Dtls where FAC_ID=?", facID); 
          logger.info("findbyFacId ran successfully");    
       return (Form18Dtls)list.get(0); 
      } 
    all dao's methods are continued here.. 
    } 


My sample bo 

    package com.fbis.form18.boimp; 
    all imports 
    @Service("form18Bo") 
    public class Form18boImp implements Form18Bo 
    { 
     @Autowired 
     Form18Dao form18dtlsdao; 

     @Transactional 
     public void save(Form18Dtls from18dtls) 
     { 
      String UniqueTransactionNumber=getFacId(from18dtls.getFacDistrict(),"Form18_Dtls"); 
      from18dtls.setFacId(UniqueTransactionNumber); 
      from18dtls.setSubmtdDate(new java.util.Date()); 
      from18dtls.setAppStatus("I"); 
      from18dtls.setFormId(23); 
      form18dtlsdao.save(from18dtls); 

     } 
     public String getFacId(String district,String tableName) 
     { 
      FacIdGenerator facid=new FacIdGenerator(); 
      String genFacid=facid.factoryIdCreator("F18", district, tableName); 
       logger.info("getFacId ran successfully");   
      return genFacid; 

     } 
     @Override 
     public Form18Dtls findbyFacId(String facID) { 
      return form18dtlsdao.findbyFacId(facID); 
     } 
    other bo's continued here 

如果我下面的类错误heirarkey,建议,欢迎,提前

+0

请任何机构可以回答? – user3252888

回答

1

如果我理解正确的感谢,你的问题是围绕从数据访问层抛出的异常,在这种情况下,你正在使用休眠作为你的供应商。

如果是这样,那么这是一个关于检查异常和未检查异常的纯Java问题。 Hibernate异常未经检查(扩展RuntimeException),因此不需要在方法签名中声明它们,也不需要捕获它们。最重要的是,可以告诉Spring将特定供应商(例如休眠)异常转换为Spring DataAccessException(请参阅http://docs.spring.io/spring/docs/4.0.x/spring-framework-reference/html/dao.html)。

关于你上面的编号问题:

  1. 正如我所说的,休眠抛出RuntimeExceptions,你并不需要声明他们,如果你不抓住他们,那么你就会@ExceptionHandler赶上他们并处理它们。
  2. 我不明白的问题
  3. 同样的答案作为2号