2017-01-23 1 views
2

:봄. 예외 번역은 어떻게 작동합니까? 내가 다음 코드를 한

@Repository 
public class UserDAOImpl implements UserDAO { 
    public void addUser(User user) { 
     throw new HibernateException("unchecked exception"); 
    } 
} 

@Service 
public class UserServiceImpl implements UserService { 

    @Autowired 
    private UserDAO userDAO; 

    @Override 
    public void addUser(User user) { 
     try { 
      userDAO.addUser(user); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

의 web.xml : 충분히 예외를 번역 할

<context:component-scan base-package="org.example.dao, 
             org.example.services"/> 
<mvc:annotation-driven /> 
<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/> 

인가? 맞춤 번역기를 구현해야합니까?

예제 코드를 얻는 것이 좋을 것입니다.

+0

시도해 보셨습니까? 그것은 그 질문에 답할 것입니다. – zapl

답변

0

기본적으로 스프링 프레임 워크와 기타 스프링 관련 프로젝트 (예 : 스프링 데이터 NoSQL)는 org.springframework .dao.DataAccessException을 상속하는 철저한 지속성 예외 계층을 정의합니다. 이 계층 구조는 JDBC, Hibernate, 다른 ORM 구현, JPA 등에서 던져지는 모든 예외를 처리합니다.

예외 적용을 위해 두 가지 작업을 수행해야합니다.

먼저 구성 파일에 org.springframework.dao.support .PersistenceExceptionTranslator 개의 구현을 구성하십시오. 이 같은 루트 설정 클래스에 LocalContainerEntityManagerFactoryBean의 빈을 정의하여이 작업을 수행 할 수 있습니다

@Bean 
public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean() 
{ 
Map<String, Object> properties = new Hashtable<>(); 
properties.put("javax.persistence.schema-generation.database.action", 
"none"); 
HibernateJpaVendorAdapter adapter = new HibernateJpaVendorAdapter(); 
adapter.setDatabasePlatform("org.hibernate.dialect.MySQL5InnoDBDialect"); //you will chose a dialect that you are using for your project. 
LocalContainerEntityManagerFactoryBean factory = 
new LocalContainerEntityManagerFactoryBean(); 
factory.setJpaVendorAdapter(adapter); 
factory.setDataSource(this.springJpaDataSource()); 
factory.setPackagesToScan("packagenames"); //the packages that contains you @Repositories annotations 
factory.setSharedCacheMode(SharedCacheMode.ENABLE_SELECTIVE); 
factory.setValidationMode(ValidationMode.NONE); 
factory.setJpaPropertyMap(properties); 
return factory; 
} 

이 클래스 LocalContainerEntityManagerFactoryBeanPersistenceExceptionTranslator을 구현합니다. 그래서 첫 걸음을 돌 보았습니다.

두 번째 단계는 @Repository 주석으로 저장소/엔티티를 표시하는 것입니다. 이렇게하면 PersistenceExceptionTranslators으로 설정된 을 사용하여 주석이 달린 bean이 예외 변환에 적합하다는 것을 Spring에 알린다. 리포지터리 (repository) 메소드가 지속성을 던지면 예외가 발생하고, PersistenceExceptionTranslators은 해당 예외를 적절하게 변환합니다.

+0

이 크기의 발췌 부분은 저작권 위반으로 간주 될 수 있습니다. 너무 많은 관련이없는 텍스트이기도합니다. – zapl

+0

정확히 내가 필요한 것! 고맙습니다! – iGreetYou