2017-01-23 102 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

基本上,Spring Framework和其他與Spring相關的項目(如Spring Data NoSQL)定義了從org.springframework .dao.DataAccessException繼承的持久性異常的徹底層次結構。此層次結構負責處理由JDBC,Hibernate,其他ORM實現和JPA等引發的所有異常。

在您的web應用程序中,您需要做兩件事來實現異常轉換。

首先,在配置文件中配置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; 
} 

該類LocalContainerEntityManagerFactoryBean實現PersistenceExceptionTranslator。所以你已經照顧到了第一步。

第二步是用@Repository註釋標記您的存儲庫/實體。這告訴Spring,帶註釋的bean有資格使用配置爲PersistenceExceptionTranslators的 進行異常轉換。如果存儲庫方法拋出任何持久性 異常,那麼PersistenceExceptionTranslators會適當地轉換這些異常。

+0

此尺寸的摘錄可能被視爲侵犯版權。這也是太多無關的文字。 – zapl

+0

正是我需要的!謝謝! – iGreetYou